转换为纪元时间戳添加小时数偏移量

问题描述:

我在日期时间字符串中的日期时间为“20160127003500”。 我需要做的是将其转换为Unix时间戳添加小时。转换为纪元时间戳添加小时数偏移量

我想添加小时偏移量为“1”或“2”或“24”。

任何人都可以请指导我在正确的方向。

问候

+0

只需将其转换为常规的DateTime和AddHours即可。有很多关于转换时间的指南。 – Equalsk

+1

该字符串看起来像'yyyyMMddHHmmss'格式,您可以使用'DateTime.ParseExact'。但是,您还需要知道是否将其解释为本地时间,UTC时间或某个其他时区的时间 - 因为Unix时间是基于UTC的时间。不知道源时区,你不能这样做。 –

+0

请也澄清你的意思是“我想增加小时偏移量”。 –

首先,解析整个字符串(包括抵消你的问题的评论中提到)到DateTimeOffset

using System.Globalization; 

string s = "20160129205500 +0100"; 
string format = "yyyyMMddHHmmss zzz"; 
DateTimeOffset dto = DateTimeOffset.ParseExact(s, format, CultureInfo.InvariantCulture); 

然后,有几种不同的方式得到一个Unix时间戳。请注意,通过“Unix时间戳”的纯粹定义,结果将以为条件,尽管现在很多语言使用更高的精度(例如在JavaScript中使用的毫秒)。

如果你的目标.NET 4.6或更高版本,只需使用内置的方法:

// pick one for the desired precision: 
long timestamp = dto.ToUnixTimeMilliseconds(); 
long timestamp = dto.ToUnixTimeSeconds(); 

如果你的目标.NET的早期版本,那么你自己计算吧:

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

// pick one for the desired precision: 
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalMilliseconds; 
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalSeconds; 
+0

优秀!这正是我需要的。太感谢了。标记为答案。 – Robin