【问题标题】:Do filesystems store time zone information?文件系统是否存储时区信息?
【发布时间】:2015-05-08 08:56:02
【问题描述】:

文件系统是否将时区信息与文件信息一起存储?我遇到了一个奇怪的错误,我执行以下 sn-p 并打印出不同的时区。

import DateTime #zope's module
for each in os.listdir("director"):
    print DateTime.DateTime(os.stat(each)[8])

#Why is it mixed up?
Foo 12:00:00 US/Eastern
Bar 12:00:00 GMT -4

在进行夏令时更改后开始发生这种情况。我看到东部和格林威治标准时间 -4 两者。 IIRC Linux 不存储时间戳信息,而是将时间存储为从 1970 年 1 月 1 日开始经过的绝对秒数。

是否有可能某些文件系统存储时区信息?我被告知 DST(夏令时)是通过使用不同的时区来表示的。那么在夏令时或一般情况下 - 这些元数据是否由文件系统存储?

例如:https://rsync.samba.org/daylight-savings.htm 指出 FAT 存储夏令时信息。

由于根据接受的答案,两者都是相同的时区,是否可以将 GMT -4 显示为东部夏令时,以便最终用户清楚地了解情况?

【问题讨论】:

  • 确定不是DateTime构造函数引入时区信息?
  • 我看到混合结果 - 有些文件是 GMT -4,有些是美国/东部 - 如果是构造函数这样做,那么它必须是东部或 GMT 对吗?
  • 另外,您提供的链接实际上并没有说 FAT 存储 DST 信息;它说 FAT 以当地时间存储时间戳。
  • Zope DateTime 文档说没有指定时区的呼叫将使用机器的时区。我不确定它如何与 DST 交互,但如果机器的时区在两次调用之间发生变化,您会在输出中看到不同的时区。
  • 这只是一个猜测,但 Zope 中可能有些东西错误地假设 GMT-5 == 美国/东部。请参阅the timezone tag wiki 中的“时区!= 偏移量”。

标签: python timezone


【解决方案1】:

我不知道有任何文件系统存储带有时间戳的时区信息。根据文件系统/操作系统,它可以以 UTC 或本地时间存储。

Zope 的 DateTime 将使用您当地的时区,除非您指定其他内容。

美国/东部夏令时是格林威治标准时间 -4,所以这可能是正确的。

【讨论】:

  • 但是你如何解释一个文件夹被循环显示的文件同时显示美国/东部和格林威治标准时间 -4 - 混合?我可以想到 Zope 的 DateTime 使用的全局设置,它将显示为美国/东部或 GMT -4,但不是混合结果集。
  • 美国/东部夏令时期间为 GMT-4。因此,它不是混合集。
  • 我的意思是我在同一个文件夹中看到一些文件显示为美国/东部,一些文件显示为 GMT -4。类似于 os.listdir(dir) 中的每个: print DateTime(os.stat(each)[8])
  • 我明白你说的。看看日期。请注意,所有标记为 GMT-4 的时间都是在夏令时(即夏季),而其他时间则不是。是同一个时区。如果你不明白,那么请解释你不明白的地方,而不是重复问题。这不是一个混合集。
  • 好吧,这是有道理的。您的意思是 DateTime 将 UTC 时间转换为 UTC - 4 并使用它自己的“如果它是在夏季逻辑中添加的”将其显示为 GMT -4 以区分它是夏季时间 - 而对于其余时间它会 UTC - 5 和显示为美国/东部。它也可以显示为 GMT -4 作为 EDT 对吗?此外,如果我想将其显示为 EST,我可能应该减去 1 小时并显示出来?如果这没有意义,那很好。我会进一步阅读。
猜你喜欢
  • 2016-03-15
  • 2021-04-19
  • 1970-01-01
  • 2020-03-08
  • 2021-06-25
  • 2012-06-28
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多