Формат даты GroupWise 2014 в DateTime

Я работаю с GroupWise 2014 Rest API, и у меня возникла проблема с анализом их формата даты.

Когда вы выбираете пользователя, вы получаете объект json с timeCreated: 1419951016000,

Но я не могу понять, в каком формате эта дата.

я пробовал

DateTime.Parse
DateTime.FromFileTime
DateTime.FromFileTimeUtc

Значение 1419951016000 должно быть около времени 2014-12-30 15:50

1 ответ

Решение

Похоже, Unix время в миллисекундах с 1 января 1970 года в UTC. Текущее время Unix в секундах показано здесь как 1419964283.

Чтобы преобразовать в DateTime чтобы узнать время UNIX, смотрите здесь: Как преобразовать метку времени 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() дает значение "30.12.2014 14:50:16". Ваше желаемое значение "2014-12-30 15:50" в UTC или по местному времени?

Если вы используете Json.NET для сериализации JSON, вы можете написать JsonConverter сделать преобразование автоматически из DateTime Свойство, используя инструкции здесь: Написание собственного Json.NET DateTime Converter. Этот код также работает в течение unix времени в секундах, поэтому его необходимо настроить.

(Наконец, поддерживая предложение Plutonix о повторной проверке документации. В частности, вам необходимо прочитать то, что в документации говорится о часовом поясе, в котором возвращается время. Вероятно, это UTC, но стоит убедиться в этом.)

Обновить

После быстрого поиска онлайн-документ выглядит довольно плохо, но на этой странице упоминается

Истекает время
долго
Необязательный. Используйте явное время истечения срока годности. Время указывается как Java долгое время.

java.util.Date представляет "указанное число миллисекунд с момента стандартного базового времени, известного как" эпоха ", а именно 1 января 1970 года, 00:00:00 по Гринвичу" как long,

Другие вопросы по тегам