【问题标题】:What is this UTC time format?这是什么 UTC 时间格式?
【发布时间】:2011-10-16 07:04:14
【问题描述】:

我正在解析一个 XML 文件,其中包含一个名为 UTCTime 的字段并包含值 1311346453064。它还附带一个名为 UTC 的字段,其中包含一个完整的值 2011-07-22T10:54:13.064-04:00 .Net DateTimeOffset 我相信。第一个字段我无法弄清楚。什么会以这种方式生成日期?它太大而不能成为 unix 时间戳,因为它将 1970 年 1 月 1 日增加了大约 41 千年。识别它或如何在不使用第二个字段的情况下将其转换为日期时间的任何帮助都会有很大帮助!谢谢。

【问题讨论】:

  • 那个日期在ISO 8601 中(ISO 8601 实际上非常灵活)。我会发布一个答案,但我仍然不知道如何在 .NET 中使用非本地/非 UTC 日期:(DateTime.Parse 理解格式。ISO 8601 可以表示未在 32 位 Unix 中表示的日期纪元数 -- DateTime 也是如此。参见 DateTime.MinValue 和 DateTime.MaxValue。
  • 另一个是自 1970 年 1 月 1 日 Unix 纪元以来的毫秒数。确保在 2038 年到来时躲在办公桌下。世界将再次终结。

标签: .net xml time timezone format


【解决方案1】:

相当于unix时间戳[i.e.自 1970 年以来的直接计数],但以毫秒而不是秒为单位。

$ date -d @1311346453
Fri Jul 22 10:54:13 EDT 2011

3064 结尾让我很清楚。

因此,要在 .NET 中进行转换,您可以使用

static readonly DateTime epoch = new DateTime(1970,1,1,0,0,0,
                                              DateTimeKind.Utc);
long value = 1311346453064L;
var ts = new TimeSpan(value*TimeSpan.TicksPerMillisecond);
var dt = epoch + ts;

或者,以牺牲一些可读性为代价稍微提高效率

const long epochTicks = 621355968000000000L;
var dt = new TimeSpan(value*TimeSpan.TicksPerMillisecond+epochTicks,
                      DateTimeKind.Utc);

请注意,这会丢弃其他字段中的时区信息(-04:00 的偏移量)。

【讨论】:

  • 完美。谢谢,这行得通!我认为未来我需要更加细心,结局确实很有意义。
【解决方案2】:

Javascript 示例:

D:\ :: more > date.js
WScript.Echo( new Date().getTime() );
^Z

D:\ :: cscript date.js
1311975458665

这是自 01.01.1970 以来的毫秒数。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2012-01-20
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多