Вопрос по c# – GetLastWriteTime возвращается 31.12.16 в 19:00

13

Я использую следующий код для записи даты изменения времени каталога на этикетку

string selectedPath = comboBox1.SelectedItem.ToString();
DateTime lastdate = Directory.GetLastWriteTime(selectedPath);
datemodified.Text = lastdate.ToString();

Он возвращает дату 31.12.16 в 19:00, которую я понятия не имею, откуда она берется. Может кто-нибудь помочь мне понять, почему он возвращает эту дату и как я могу это исправить? Я использую .NET 3.5

Ваш Ответ

5   ответов
0

GetLastWriteTime не всегда возвращайте достоверную дату, используйте это

DateTime now = DateTime.Now;
TimeSpan localOffset = now - now.ToUniversalTime();
DateTime lastdate = File.GetLastWriteTimeUtc(selectedPath) + localOffset;
datemodified.Text = lastdate.ToString();
35

документация:

If the directory described in the path parameter does not exist, this method returns 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC), adjusted to local time.

Итак, предположительно, ваш часовой пояс UTC-5 (в январе), а каталог не существует ...

@ Snoop: Вероятно, это просто эпоха, которая была выбрана. В вычислениях используется много эпох - 1582 для меток времени GUID, 1AD для .NET, 1970-01-01 для всего, что основано на Unix, 1900 для Excel IIRC ...
Есть ли какое-либо значение для этой даты (кроме параметра не существует)?
@JonSkeet Хорошо. Я давно не занимался Java, но я знаю, что у них был один ... который был похож на "когда Java была изобретена". или что-то ... Мне было интересно, было ли в Microsoft историческое значение при выборе этой конкретной даты.
Просто скажи мне, Джон, где ты все это помнишь?
@NikhilAgrawal, посмотрев определение вызова на MSDN. Человек не должен помнить все, просто должен помнить, чтобы посмотреть
0

GetLastWriteTime()/GetLastWriteTimeUtc() без жесткого кодирования даты / времени дозорной эпохи, которые используются для указания условия, что файл / каталог не найден, выглядит следующим образом:

// ##### Local file time version #####
DateTime fileTimeEpochLocal=DateTime.FromFileTime(0);
// Use File.GetLastWriteTime(pathname) for files
// and Directory.GetLastWriteTime(pathname) for directories
DateTime lastWriteTime=Directory.GetLastWriteTime(selectedPath); 

// Check for a valid last write time
if (lastWriteTime!=fileTimeEpochLocal) // File found
    DoSomethingWith(selectedPath,lastWriteTime);
else // File not found
    HandleFileNotFound(selectedPath);

// ##### UTC file time version #####
DateTime fileTimeEpochUtc=DateTime.FromFileTimeUtc(0);
// Use File.GetLastWriteTimeUtc(pathname) for files
// and Directory.GetLastWriteTimeUtc(pathname) for directories
DateTime lastWriteTimeUtc=Directory.GetLastWriteTimeUtc(selectedPath);

// Check for a valid last write time
if (lastWriteTimeUtc!=fileTimeEpochUtc) // File found
    DoSomethingWith(selectedPath,lastWriteTimeUtc);
else // File not found
    HandleFileNotFound(selectedPath);
0

что ваше время установлено правильно. Вторая мысль - щелкнуть правой кнопкой мыши по этой папке и посмотреть, что она говорит в свойствах. Наконец, я создаю новую папку с тестами и запускаю на ней бит тестов GetLastWriteTime, чтобы вы знали, что вы получаете.

Тогда я представляю, что строка неверна
Понедельник, май <07, & # x200E; 2012; & # x200F; & # x200E; 4: 06: 00 PM - это дата в одной из папок. Это просто странно для меня. Код имеет смысл, но его возвращение не имеет heinst
0

но сегодня я столкнулся с этой проблемой. Эта конкретная дата также возвращается, когда ваш путь неверен или файл не существует, поскольку в любом из этих случаев нет встроенного исключения.

Похожие вопросы