【问题标题】:FileInfo displaying a peculiar dateFileInfo 显示一个特殊的日期
【发布时间】:2010-05-19 13:44:37
【问题描述】:

为什么以下显示 12/31/1600 ???

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

结束模块

【问题讨论】:

  • 1600 年 12 月 31 日是英国东印度公司成立的日期。有喜欢恶作剧的印度同事吗?
  • 这太有趣了,我是印度人:)

标签: .net


【解决方案1】:

代码好像找不到文件,查看SDK中GetLastAccessTime函数的文档http://msdn.microsoft.com/en-us/library/system.io.file.getlastaccesstime.aspx

它说,

如果路径中描述的文件 参数不存在,此方法 返回 1 月 1 日午夜 12:00, 公元 1601 年 (C.E.) 协调通用 时间 (UTC),调整为当地时间。

【讨论】:

  • 好的,这是最奇怪的 .NET 库行为的候选者。他们为什么要返回 anything 而不是在这里抛出异常,为什么要特别返回那个日期?为什么要返回调整后的本地时间而不是 UTC(使这种情况更难检查)?这比 .NET 在尝试加载无效图像文件时抛出 OutOfMemoryException 更奇怪。
  • 这是我的 .NET 问题的候选人:stackoverflow.com/questions/241134/…
【解决方案2】:

您没有指定看到的时间,只指定日期,但我怀疑是 23:00:00。如果您使用Console.WriteLine(fi.LastAccessTime),您可能会看到它打印出-36000000000

文件的 last-access-timestamp 被返回为 0,因为作为 Sijin pointed out,路径无效,或者因为您在 NTFS 卷上有disabled last-access update,或者因为您正在使用 Vista 或更高版本,其中 it is disabled by default

无论如何,因为Windows uses January 1, 1601 是它的epoch base,所以日期0 将返回00:00:00 1601-01-01

现在你为什么把它看成是 1600 年 12 月 31 日?很简单:时区。您的个人资料没有传记信息,但您的姓名和传记部分中的拉丁语引述并非不合理猜测您可能住在西班牙附近的某个地方,该时区为 UTC+01:00 .在这种情况下,当时间戳调整为本地时间时,它将以时间(0)为基准,减去一小时以将其转换为您的时区。因此,您会得到值-36000000000,即23:00:00 1600-12-31

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2012-12-20
    • 2013-04-11
    相关资源
    最近更新 更多