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

Posted

技术标签:

【中文标题】转换为纪元时间戳添加小时偏移量【英文标题】:Converting to epoch time-stamp adding hours offset 【发布时间】:2016-04-29 09:11:37 【问题描述】:

我在字符串中的日期时间为“20160127003500”。 我需要做的就是将其转换为 Unix 时间戳,并为其添加小时数。

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

谁能指导我正确的方向。

问候

【问题讨论】:

只需将其转换为常规的 DateTime 和 AddHours。有很多关于转换时间的指南。 该字符串看起来是yyyyMMddHHmmss 格式,您可以将其与DateTime.ParseExact 一起使用。但是,您还需要知道是将其解释为本地时间、UTC 时间还是其他时区的时间——因为 Unix 时间是基于 UTC 的。不知道源时区是做不到的。 还请澄清“我想添加小时偏移”的确切含义。 @MattJohnson 感谢您回复原始时区是 CET,这里是完整字符串的“20160129205500 +0100”。小时偏移是指通过传递一个整数值来增加或减少这个时间的小时数。 不要那样做。只需使用DateTimeOffset.ParseExact。我正在使用手机,但当我回到 PC 时,我会发布一个示例,除非有人抢先一步。 【参考方案1】:

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

【讨论】:

太棒了!这正是我所需要的。太感谢了。标记为答案。

以上是关于转换为纪元时间戳添加小时偏移量的主要内容,如果未能解决你的问题,请参考以下文章

将小时和分钟字符串转换为纪元(unix 时间戳)

使用 strptime 将带偏移量的时间戳转换为 datetime obj

如何在 python 中将普通时间戳转换为纪元时间戳

如何在 kotlin 中将纪元时间戳转换为 unix 十六进制时间戳?

如何在熊猫数据框中设置时间戳的偏移量?

将纪元时间戳转换为上午 12:01 的时间