- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个遗留应用程序,需要用它来补充一些数据。目前,我们有一个存储美国(及其领土)邮政编码的数据库表,以及一个 GMT 偏移量,以及一个显示该邮政编码是否使用夏令时的标志。这是从一些免费提供商那里下载的,我现在找不到来源。
我现在需要用每个邮政编码的完整 Olson 名称(例如 America/New York
)补充此表,因为这似乎是转换存储在中的给定日期/时间的唯一好方法将该购买者本地的数据库转换为 UTC 感知日期时间
对象。
看一下表格:
zip state city lat lon gmt dst
00605 PR AGUADILLA 18.4372 -67.1593 -4 f
02830 RI HARRISVILLE 41.9782 -71.7679 -5 t
99503 AK ANCHORAGE 61.1895 -149.874 -9 t
在另一个相关表 Purchases
中,我有一个 postres
timestamp without tz
列,目前包含类似 2014-05 的内容-27T15:54:26
,表示在本地某个时间在该邮政编码处进行了购买。 (忽略将这些本地化时间戳保存到数据库时剥离时区信息的愚蠢行为)
最大的问题是:
我如何根据 zipcode
表中每个邮政编码的 timestamp
字符串创建规范化的 UTC 时间
?这将假定时间戳作为 zipcode
表中每个示例行的本地时间戳写入数据库。
例如,手动查找示例表中每个项目的 Olson 时区名称,我得出以下结果:
>>> timestring = '2014-05-27T15:54:26'
>>> dt_naive = datetime.strptime(timestring, '%Y-%m-%dT%H:%M:%S')
>>> # First example - Puerto Rico (no DST since 1945)
>>> print pytz.utc.normalize(pytz.timezone('America/Puerto_Rico').localize(dt_naive))
2014-05-27 19:54:26+00:00
# Second example - Road Island (At that timestamp, UTC Offset was same as PR because of DST)
>>> print pytz.utc.normalize(pytz.timezone('US/Eastern').localize(dt_naive))
>>> 2014-05-27 19:54:26+00:00
# Third Example - Anchorage, AK (AKDT at timestamp)
>>> print pytz.utc.normalize(pytz.timezone('America/Anchorage').localize(dt_naive))
2014-05-27 23:54:26+00:00
我见过几个销售邮政编码数据库的商业产品,它可以给我一个邮政编码 -> 时区查找。但是,他们似乎只给我一个给定时区的“EST”。所以,我想我可以将美国时区(包括领土)的可能时区列表映射到每个时区的奥尔森名称。这可能看起来像这样:
zipcode_olson_lookup = {
('PR', 'f', 'AST'): 'America/Puerto_Rico',
('AK', 'f', 'AKDT',): 'America/Anchorage',
('AK', 't', 'AKT',): 'America/Anchorage',
...
}
非常欢迎任何建议!
最佳答案
UTC本身的偏移量可能是模棱两可的(它可能对应几个时区,在某个时间段可能有不同的规则):
#!/usr/bin/env python
from datetime import datetime, timedelta
import pytz # $ pip install pytz
input_utc_offset = timedelta(hours=-4)
timezone_ids = set()
now = datetime.now(pytz.utc) #XXX: use date that corresponds to input_utc_offset instead!
for tz in map(pytz.timezone, pytz.all_timezones_set):
dt = now.astimezone(tz)
tzinfos = getattr(tz, '_tzinfos',
[(dt.tzname(), dt.dst(), dt.utcoffset())])
if any(utc_offset == input_utc_offset for utc_offset, _, _ in tzinfos):
# match timezones that have/had/will have the same utc offset
timezone_ids.add(tz.zone)
print(timezone_ids)
{'America/Anguilla',
'America/Antigua',
'America/Argentina/Buenos_Aires',
...,
'Cuba',
'EST5EDT',
'Jamaica',
'US/East-Indiana',
'US/Eastern',
'US/Michigan'}
您甚至不能使用 pytz.country_timezones['us']
限制列表,因为它会排除您的示例之一:'America/Puerto_Rico'
。
如果你知道坐标(纬度,经度);您可以从 the shape file: you could use a local database or a web-service 获取时区 ID :
#!/usr/bin/env python
from geopy import geocoders # pip install "geopy[timezone]"
g = geocoders.GoogleV3()
for coords in [(18.4372, -67.159), (41.9782, -71.7679), (61.1895, -149.874)]:
print(g.timezone(coords).zone)
America/Puerto_Rico
America/New_York
America/Anchorage
注意:某些本地时间可能不明确,例如,当时间在 DST 转换结束期间回落时。在这种情况下,您可以将 is_dst=None
传递给 .localize()
方法以引发异常。
the tz database 的不同版本某些时区在某些日期可能具有不同的 utc 偏移量,即,仅存储 UTC 时间和时区 ID 是不够的(使用哪个版本取决于您的应用程序)。
关于python - pytz:仅从 GMT 偏移返回 Olson 时区名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30315485/
我正在尝试做这样的事情:Name[i] = "Name"+ (i+1) 在 forloop 中,这样数组的值将是:Name[0] = Name1,Name[1] = Name2,Name[2] = N
我读了here,在GSP中我们可以这样写: ${params.action} 从GSP中,我们可以使用${params.action}作为参数调用Javascript函数(请参阅here)。 是否有其
我的问题:非常具体。我正在尝试想出解析以下文本的最简单方法: ^^domain=domain_value^^version=version_value^^account_type=account_ty
我创建了一条与此类似的路线: Router::connect("/backend/:controller/:action/*"); 现在我想将符合此模式的每个 Controller 路由重命名为类似
我在 Visual Studio 2013 项目中收到以下警告: SQL71502 - Procedure has an unresolved reference to object 最佳答案 这可以
任何人都可以指导我使用名称/值 .NET 集合或 .NET 名称/值字典以获得最佳性能吗?请问最好的方法是什么?我的应用程序是 ASP.NET、WCF/WF Web 应用程序。每个集合应该有 10 到
我在 Zend Framework 2 中有一个默认模块: namespace Application\Controller; use Zend\Mvc\Controller\AbstractActi
这是表格: 关于javascript - 在 javascript 中,这是一个有效的结构吗? : document. 名称.名称.值?,我们在Stack Overflow上找到一个类似的
HtmlHelper.ActionLink(htmlhelper,string linktext,string action) 如何找出正确的路线? 如果我有这个=> HtmlHelper.Actio
我需要一些有关如何将 Controller 定义传递给嵌套在 outer 指令中的 inner 指令的帮助。请参阅http://plnkr.co/edit/Om2vKdvEty9euGXJ5qan一个
请提出一个数据结构来表示内存中的记录列表。每条记录由以下部分组成: 用户名 积分 排名(基于积分)- 可选字段- 可以存储在记录中或可以动态计算 数据结构应该支持高效实现以下操作: Insert(re
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我想要一个包含可变数量函数的函数,但我希望在实际使用它们之前不要对它们求值。我可以使用 () => type 语法,但我更愿意使用 => type 语法,因为它似乎是为延迟评估而定制的。 当我尝试这样
我正在编写一个 elisp 函数,它将给定键永久绑定(bind)到当前主要模式的键盘映射中的给定命令。例如, (define-key python-mode-map [C-f1] 'pytho
卡在R中的错误上。 Error in names(x) <- value : 'names' attribute must be the same length as the ve
我有字符串,其中包含名称,有时在字符串中包含用户名,后跟日期时间戳: GN1RLWFH0546-2020-04-10-18-09-52-563945.txt JOHN-DOE-2020-04-10-1
有人知道为什么我会收到此错误吗?这显示将我的项目升级到新版本的Unity3d之后。 Error CS0103: The name `Array' does not exist in the curre
由于 Embarcadero 的 NNTP 服务器从昨天开始就停止响应,我想我可以在这里问:我使用非数据库感知网格,我需要循环遍历数据集以提取列数、它们的名称、数量行数以及每行中每个字段的值。 我知道
在构建Android应用程序的子项目中,我试图根据根build.gradle中的变量设置版本代码/名称。 子项目build.gradle: apply plugin: 'com.android.app
示例用例: 我有一个带有属性“myProperty”的对象,具有 getter 和 setter(自 EcmaScript 5 起支持“Property Getters 和 Setters”:http
我是一名优秀的程序员,十分优秀!