转换为纪元时间戳添加小时偏移量
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;
【讨论】:
太棒了!这正是我所需要的。太感谢了。标记为答案。以上是关于转换为纪元时间戳添加小时偏移量的主要内容,如果未能解决你的问题,请参考以下文章
使用 strptime 将带偏移量的时间戳转换为 datetime obj