C # - DateTime.FromFileTimeUtc для DateTime.FromFileTime - PullRequest
6 голосов
/ 19 июня 2011

Проблема:

У меня МНОГО кода, который во многих местах предполагает местное время и использует функцию DateTime.FromFileTime.

Теперь некоторые из наших служб передачи данных перешли на время UTC, и я хочу знать, есть ли способ преобразовать время UTC в местное время?

В обоих случаях все, что у меня есть, это long, то есть время файла Windows. Если я использую функцию FromFileTimeUtc, выводимое мной значение является точным, а если нет, то это неправильно.

Я не хочу менять весь свой код, где написано FromFileTime на FromFileTimeUtc. Вместо этого у меня есть слой преобразования, где я буду делать это преобразование.

Есть идеи?

1 Ответ

4 голосов
/ 19 июня 2011
var utcDateTime = DateTime.UtcNow;
var localDateTime = TimeZone.CurrentTimeZone.ToLocalTime(utcDateTime);

[РЕДАКТИРОВАТЬ] Чтобы ответить на ваш комментарий: 'хотите изменить длинное значение, которое передается в DateTime.FromFileTimeUtc .., чтобы оно давало то же значение при передаче в DateTime.FromFileTime'

private static long ConvertFileTimeToLocalTime(long fileTime)
{
    return fileTime + ((long)TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalMilliseconds * 10000);
}

Тест:

var fileTime = DateTime.Now.ToFileTime();

var wrongTime = DateTime.FromFileTimeUtc(fileTime);

var correctTime = DateTime.FromFileTimeUtc(ConvertFileTimeToLocalTime(fileTime));
...