【问题标题】: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 时,我会发布一个示例,除非有人抢先一步。

标签: c# datetime epoch


【解决方案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;

【讨论】:

  • 太棒了!这正是我所需要的。太感谢了。标记为答案。
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2018-05-28
相关资源
最近更新 更多