如何在给定时间和状态信息的情况下获取当地时区
Posted
技术标签:
【中文标题】如何在给定时间和状态信息的情况下获取当地时区【英文标题】:How to get the local timezone given time and state info 【发布时间】:2017-12-05 19:15:41 【问题描述】:我正在使用Python
和Amazon Redshift
的组合。
我有来自不同用户的点击以及围绕这些点击的一些数据。这可以用以下格式可视化:
UTCTime State IP Country
<time> CA 10.1.1.1 US
<time> AZ 10.1.1.2 US
<time> NY 10.1.1.3 US
我想将此 UTC 时间转换为当地时间,因为以上点击来自不同时区。 Amazon Redshift
中有一个函数:
CONVERT_TIMEZONE ( ['source_timezone',] 'target_timezone', 'timestamp')
但这需要Target timezone
。给定此信息,我如何找到此目标时区。
如果有任何其他方法可以做到这一点,我也会很高兴知道这一点。
任何帮助将不胜感激。
【问题讨论】:
对此没有简单的答案,因为虽然大多数美国州确实只存在于一个时区,但并非所有州(OR、ID、ND、SD、NE、KS、MI 、IN、KY、TN、TX 和 FL 观察多个时区)。使问题进一步复杂化的是,某些州(亚利桑那州)不遵守夏令时,但其余州则遵守,并且给定州的目标时区偏移量将根据给定时间戳是否属于标准时间或 DST 而有所不同. 【参考方案1】:您可以使用us 包来解决这个问题。通过 pip 添加:
$ pip install us
状态查找方法允许通过 FIPS 代码、缩写和名称进行匹配:
>>> us.states.lookup('24')
<State:Maryland>
>>> us.states.lookup('MD')
<State:Maryland>
>>> us.states.lookup('md')
<State:Maryland>
>>> us.states.lookup('maryland')
<State:Maryland>
正如我们的包描述中提到的,State
对象具有time_zones
和capital_tz
属性,它们的名称是不言自明的:
>>> us.states.lookup('MD').capital_tz
'America/New_York'
和
>>> us.states.lookup('MD').time_zones
['America/New_York']
现在您可以轻松地将州缩写翻译成完整的时区名称。
【讨论】:
以上是关于如何在给定时间和状态信息的情况下获取当地时区的主要内容,如果未能解决你的问题,请参考以下文章