2010-05-19 3 views
1

Почему следующий дисплей 12/31/1600 ???FileInfo отображает своеобразную дату

Imports System.IO 

Module Module1 

Sub Main() 
    Dim fi As New FileInfo("DocFiles\phillips_phone_number.txt") 
    Console.WriteLine(fi.FullName) 
    Console.WriteLine(fi.LastAccessTime.ToShortDateString) 
    Console.ReadKey() 
End Sub 

End Module

+0

31 декабря 1600 года была назначена британская Ост-Индская компания. У вас есть индийские коллеги, которые любят играть в шутки? – MusiGenesis

+0

Это так смешно, я индийский :) – Sijin

ответ

2

кажется, что код не может найти файл, обратитесь к документации по функции GetLastAccessTime в SDK http://msdn.microsoft.com/en-us/library/system.io.file.getlastaccesstime.aspx

Он утверждает,

Если файла, описанного в пути , параметр не существует, этот метод возвращается 12:00 полночь, 1 января, 1601 A.D. (C.E.) Скоординированный универсальный Время (UTC), с поправкой на местное время.

+0

ОК, это один из кандидатов на самые причудливые поведение библиотеки .NET. Почему они возвращают * ничего * вместо того, чтобы бросать здесь исключение и зачем возвращать эту дату в частности? И зачем возвращать скорректированное местное время вместо UTC (сделать это условие гораздо сложнее проверить)? Это странно, чем .NET, бросая OutOfMemoryException при попытке загрузить недопустимый файл изображения. – MusiGenesis

+0

Это кандидат на мой вопрос .NET getchas: http://stackoverflow.com/questions/241134/what-is-the-worst-gotcha-in-c-or-net – MusiGenesis

0

Вы не указали время, которое вы видите, только дата, но я подозреваю, что это 23:00:00. Если вы используете Console.WriteLine(fi.LastAccessTime), вероятно, вы увидите его печать -36000000000.

Последняя-доступ Отметка файла возвращаются как 0 либо потому, что, как и Sijin pointed out, путь неверен, или потому, что у вас есть disabledlast-access update на томе NTFS, или потому, что вы используете Vista, или выше в котором it is disabledby default.

В любом случае, поскольку Windows uses January 1, 1601 как его epoch base, дата 0 вернется 00:00:00 1601-01-01.

Теперь, почему вы видите это как 31 декабря 1600 года вместо этого? Простой: часовые пояса. У вашего профиля нет биографической информации, но ваше имя и латинская цитата в вашем разделе биографии делают это неразумным, чтобы предположить, что вы можете жить где-то в Испании, что находится в часовом поясе UTC + 01: 00. В этом случае, когда метка времени настроена на местное время, в качестве базы потребуется время (0) и вычесть один час, чтобы преобразовать ее в часовой пояс. Таким образом, вы получаете значение -36000000000, которое составляет 23:00:00 1600-12-31.

Смежные вопросы