这是保存时区规则的标准格式吗?

时间:2017-12-18 18:48:15

标签: datetime timezone python-dateutil

我正在python-dateutil上做一些“软件考古”来完全记录(并收紧)dateutil.tz.tzstr接受的格式,我遇到了一个奇怪的时区格式,显然是明确支持(链接转到代码):

# GMT0BST,3,0,30,3600,10,0,26,7200[,3600]

只是阅读代码,我已经弄清楚它是如何工作的。它从TZ环境变量开始:

  • GMT:标准时间缩写
  • 0:标准偏移量(以小时为单位)
  • BST:DST缩写

其余的是逗号分隔的列表,分为两部分:

  • 3,0,30,3600:DST-> STD转换时间说明符 - 月份,星期几,星期几,转换发生午夜后的秒数(请注意,当“星期几”为0时,跟随的数字实际上是这个月的一天)
  • 10,0,26,7200:STD-> DST转换时间说明符 - 与上面相同
  • [,3600]:如果指定,则表示在DST期间偏移量有多大(默认为1小时)

与此字符串等效的GNU TZ variableGMT0BST,J89/1,J299/2

>>> from dateutil import tz
>>> tz1 = tz.tzstr('GMT0BST,3,0,30,3600,10,0,26,7200')
>>> tz2 = tz.tzstr('GMT0BST,J89/1,J299/2')
>>> tz1 == tz2
True

这是某个标准的时区格式,还是只添加了dateutil的早期维护者之一?添加一个表达与GNU TZ变量完全相同的自定义时区格式似乎有些奇怪,但我在搜索时区规则时只看到“IANA数据库”和“POSIX TZ变量”作为格式

1 个答案:

答案 0 :(得分:1)

不,这不是任何形式的标准格式(AFAIK)。必须是dateutil内部的东西。

请注意,这似乎是Europe/London,而正确的POSIX字符串(当前年份)将为GMT0BST,M3.3.0/1,M10.5.0