如何在Python中从日期时间字符串中获取时区?

13 浏览
0 Comments

如何在Python中从日期时间字符串中获取时区?

我有一个看起来像这样的日期字符串Tue Jul 19 2016 14:00:00 GMT-0700 (PDT)。有没有一个库或函数可以做类似的事情?

print get_tz('Tue Jul 19 2016 14:00:00 GMT-0700 (PDT)')
'US/Pacific'

0
0 Comments

问题的出现的原因是在处理时间时,存在着时区缩写与时区标识符之间的映射问题。例如,CST可以表示中央标准时间、中国标准时间或古巴标准时间。另外,由于时间字符串中包含了偏移和缩写,可能还存在模糊性。例如,如果字符串包含了 "GMT+02:00 (EET)",那么可能对应于这里列出的多个位置,其中一些位置全年使用EET,其他位置则在冬季使用EET,在夏季使用EEST。即使使用EEST的位置,它们的开始和结束时间也不完全相同。因此,每个不同的变化都会创建一个不同的时区标识符,它们可能具有略微不同的过渡日期或时间。即使当前的过渡时间相同,它们在历史上可能是不同的。这些问题会影响任何试图将时区缩写和/或偏移解析为特定时区的库或函数,无论使用哪种编程语言。

解决方法可能是通过使用时区偏移来获取正确的时间,并将缩写仅用于格式化。然而,仅凭时间戳中的偏移和缩写,只能确定它们在提供的具体时间点上有效。不能保证偏移或缩写适用于其他特定的时间点,除非通过其他渠道获得特定的时区信息。因此,可以考虑通过一些方法,如在浏览器中使用JavaScript来获取实际的时区标识符,然后在Python中使用pytz或dateutil库来处理时间。这样可以确保获取到正确的时区标识符,并据此进行时间的处理。

0
0 Comments

在Python中,有时候需要从日期时间字符串中获取时区信息。然而,由于时区表示的方式各不相同,这可能会导致一些问题。下面是一个关于如何从日期时间字符串中获取时区的问题以及解决方法的例子。

在Python中,有一个名为`python-dateutil`的库,它提供了一个`parse`函数,可以将字符串解析为日期时间对象。但是,它默认不会将时区信息解析为时区对象。因此,如果我们想要获取时区信息,就需要使用`tzinfos`参数。

下面是一个使用`tzinfos`参数的例子:

from dateutil import tz
from dateutil.parser import parse
# 定义一些常见的美国时区
ET = tz.gettz('US/Eastern')
CT = tz.gettz('US/Central')
MT = tz.gettz('US/Mountain')
PT = tz.gettz('US/Pacific')
# 定义字典,将常见的时区名映射为时区对象
us_tzinfos = {'CST': CT, 'CDT': CT,
              'EST': ET, 'EDT': ET,
              'MST': MT, 'MDT': MT,
              'PST': PT, 'PDT': PT}
# 解析带有时区信息的日期时间字符串
dt_est = parse('2014-01-02 04:00:00 EST', tzinfos=us_tzinfos)
# 输出时区对象
# >>> dt_est.tzinfo
# tzfile('/usr/share/zoneinfo/US/Eastern')
dt_pst = parse('2016-03-11 16:00:00 PST', tzinfos=us_tzinfos)
# 输出时区对象
# >>> dt_pst.tzinfo
# tzfile('/usr/share/zoneinfo/US/Pacific')

通过上述代码,我们可以看到,使用`tzinfos`参数可以将常见的时区名映射为对应的时区对象。这样,我们就可以从日期时间字符串中获取到正确的时区信息了。

总结起来,通过使用`python-dateutil`库的`parse`函数,并结合`tzinfos`参数,我们可以方便地从日期时间字符串中获取时区信息。这对于处理不同时区的日期时间数据非常有用。

0