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

时间:2016-01-22 17:09:03

标签: c# datetime epoch

我在字符串中的日期时间为" 20160127003500"。 我需要做的是将它转换为Unix时间戳,为它增加几个小时。

我想将小时偏移量添加为" 1"或" 2"或" 24"。

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

此致

1 个答案:

答案 0 :(得分:2)

首先,将整个字符串(包括您在问题评论中提到的偏移量)解析为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;