1

I'm working with the GroupWise 2014 Rest API and I have a problem parsing their date format.

When you fetch a user you receive a json object with "timeCreated": 1419951016000,

But I can't figure out what format that date is.

I've tried

DateTime.Parse
DateTime.FromFileTime
DateTime.FromFileTimeUtc

The value 1419951016000 should be around the time 2014-12-30 15:50

4

1 回答 1

1

看起来像自 1970 年 1 月 1 日 UTC 以来以毫秒为单位的unix 时间。当前以秒为单位的unix 时间在此处显示为 1419964283

要将 a 转换为DateTimeunix 时间,请参见此处:如何将 UNIX 时间戳转换为 DateTime,反之亦然?. 该代码适用于 unix 时间(以秒为单位);以下适用于以毫秒为单位的 unix 时间,表示为long

public static class UnixTimeHelper
{
    const long MillisecondsToTicks = 10000;
    static readonly DateTime utcEpochStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

    static DateTime UtcEpochStart { get { return utcEpochStart; }}

    public static DateTime ToDateTime(long unixTimeInMs, DateTimeKind kind)
    {
        var dateTime = UtcEpochStart + new TimeSpan(MillisecondsToTicks * unixTimeInMs);
        if (kind == DateTimeKind.Local)
            dateTime = dateTime.ToLocalTime();
        return dateTime;
    }

    public static long ToUnixTimeInMs(DateTime dateTime)
    {
        if (dateTime.Kind == DateTimeKind.Local)
            dateTime = dateTime.ToUniversalTime();
        var span = dateTime - UtcEpochStart;
        return (long)(span.Ticks / MillisecondsToTicks);
    }
}

有了这个代码。UnixTimeHelper.ToDateTime(1419951016000, DateTimeKind.Utc).ToString()给出值“12/30/2014 2:50:16 PM”。您想要的“2014-12-30 15:50”值是 UTC 还是您的本地时间?

如果您使用 Json.NET 序列化您的 JSON,您可以使用此处的说明编写自定义JsonConverter以从DateTime属性自动进行转换:编写自定义 Json.NET DateTime 转换器。该代码也适用于以秒为单位的 unix 时间,因此需要进行调整。

(最后,附议 Plutonix 的建议以仔细检查文档。特别是您需要阅读文档中有关返回时间的时区的内容。它可能是 UTC,但需要确保。)

更新

快速搜索后,在线文档看起来很糟糕,但是这个页面提到了

expiretime
long
可选。使用明确的到期截止时间。时间被指定为java long time。

java.util.Date表示“自称为“纪元”的标准基准时间,即 1970 年 1 月 1 日 00:00:00 GMT 以来的指定毫秒数”为long.

于 2014-12-30T19:28:51.573 回答