FileTime to string - PullRequest
       57

FileTime to string

0 голосов
/ 27 августа 2018

Я читаю некоторые значения Microsoft FileTime, сохраненные как long, и пытаюсь преобразовать их в удобочитаемую дату.

Например, значение 131733712713359180 преобразуется в: Wednesday, June 13, 2018 1:47:51pm. Это было сделано с помощью онлайн-инструмента здесь: Онлайн конвертер времени

У меня это хорошо работает на Java, но когда я пытаюсь сделать это в C #, я получаю неправильный год. Вывод, который я получаю: 13/06/0418 13:47:51.

Код, который я использую для преобразования:

public string CalculateTimestamp(Int64 epoch)
{
    DateTime date = DateTime.Now;

    try
    {
        date = new DateTime(epoch);
        DateTime filetime = new DateTime(date.ToFileTime());
        result = filetime.ToString();
    }
    catch (Exception uhoh)
    {
        result = "failedtoparsetimestamp";
    }

    return result;
}

При выполнении преобразования в Java это код, который я использую.

public String calculateTimeStamp(long epoch) {

    if (epoch == 0) {
        return "--";
    }

    long unixDifference = 11644473600000L;

    long timeStamp = (epoch / (10 * 1000)) - unixDifference;

    Date date = new Date(timeStamp);

    return date.toString();
}

Я догадывался, что преобразование C # должно быть более простым, но я не могу понять, почему год неправильный. Я пробовал оба UInt64 и Int64, оба дают одинаковый (неправильный) результат.

Любые предложения будут с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Это встроено в DateTime, поэтому нет необходимости делать какие-либо корректировки:

var date = DateTime.FromFileTimeUtc(131733712713359180);

Возвращает 2018-06-13 13:47:51

...