Там хорошая информация в существующих ответах, но позвольте мне попытаться прагматическое резюме:
Единственный раз, когда различие между System.DateTime.ToFileTime()
и System.DateTime.ToFileTimeUtc()
вопросами, когда .Kind
свойства экземпляра равняется Unspecified
, то есть, если это неясно независимо от того, является ли значение времени местным или UTC время.
Эта информация была фактически ответом Hans Passant, что он сам удалил.
Других слов: для System.DateTime
экземплярам, .Kind
свойства равно либо Local
или Utc
(единственных других возможных значений), System.DateTime.ToFileTime()
и System.DateTime.ToFileTimeUtc()
ведут себя одинаково - это то, что ОП опытный, потому что его входное значение было от .Kind
Local
(вид, возвращаемый File.GetCreationTime()
).
Обратите внимание, что соответствующий тип System.DateTimeOffset
дизайн всегда несет полную информацию о часовом поясе, так что никогда не двусмысленность, поэтому этот тип только имеет метод .ToFileTime()
.
Как уже отмечалось, возвращение значение всегда представляет время UTC:
время файла значения по определению, неизменно представляют точку во времени в UTC.
Таким образом, как .ToFileTime()
, так и .ToFileTimeUtc()
создать момент времени, выраженный как счетчик 100 нс с полуночи 1 января 1601 г. UTC.
В дополнение к собственному примеру OP с одним где .ToFileTime()
и .ToFileTimeUtc()
сделать отличается результатом:
// Create a DateTime instance with .Kind equal to Unspecified;
// use the earliest date that can be represented as a file time.
DateTime dtUnspecified = DateTime.Parse("1601-01-01");
Console.WriteLine(
dtUnspecified.ToFileTime() + "\n" +
dtUnspecified.ToFileTimeUtc()
);
Пример вывод в часовом поясе США Восточного:
180000000000 // 1601-01-01T05:00:00Z - 5 AM UTC
0 // 1601-01-01T00:00:00Z - midnight UTC
[Это вопрос] (http://www.pcreview.co.uk/threads/tofiletime-vs-tofiletimeutc-issues.2642152/), и документ ссылки предлагает более подробно –
@DStanley, я не знаю, обновлена ли документация для этой ссылки. Ссылка на GotDotNet нарушена, и поиск Google не открыл веб-страницу для GotDotNet. Кроме того, я тестировал числа, которые я получил против LocalFileTimeToFileTime() в C++. Это занимает местное время и конвертирует его в UTC. Выход для .ToFileTimeUtc совпадает с местным временем в C++, а не временем UTC – Aaron
Каков ваш собственный часовой пояс? – albertjan