我的总部在英国,与夏令时英国夏令时和时区打交道。在
我的代码是:
TIME_OFFSET = 1 # 0 for GMT, 1 for BST
def RFC3339_to_localHHMM(input):
# Take an XML date (2013-04-08T22:35:00Z)
# return e.g. 08/04 23:35
return (datetime.datetime.strptime(input, '%Y-%m-%dT%H:%M:%SZ') +
datetime.timedelta(hours=TIME_OFFSET)).strftime('%d/%m %H:%M')
设置一个这样的变量感觉非常错误,但我找不到任何优雅的方法来实现上面没有可怕的代码量。我是不是漏掉了什么东西,或者没有办法(例如)读取系统时区?在
要将UTC转换为给定时区:
另请参见How to convert a python utc datetime to a local datetime using only python standard library?。在
你好像问了几个不同的问题。在
首先,如果你只关心你自己的机器当前的本地时区,你不需要知道它是什么。只需使用本地到UTC函数。API中有一些漏洞,但是即使找不到所需的函数,也可以通过POSIX时间戳和^{} 和
utcfromtimestamp
方法从本地到UTC或反之亦然。在如果您希望能够处理任何时区,请参见the docs的顶部,以了解感知对象和朴素对象之间的区别,但基本上:可感知对象是知道其时区的对象。所以,这就是你需要的。问题是,正如文件所说:
支持时区的最简单方法是安装和使用第三方库^{} 。在
同时,正如^{} and ^{} Behavior 所解释的那样,} 和/或
strptime
总是返回一个朴素的对象。然后,您必须调用^{astimezone
(取决于字符串是UTC时间还是本地时间)以获得一个带有正确时区的感知对象。在但是,即使这样,你仍然需要知道你所在的时区,这意味着你仍然需要一个常数。换句话说:
那么,如何让操作系统给你本地时区呢?好吧,对于不同的平台,这是不同的,Python没有内置的帮助。但是有一些不同的第三方库可以做到,比如^{} 。例如:
^{pr2}$但现在我们已经绕了一圈了。如果您只想要本地时区,那么您根本就不需要时区(至少对于您的简单用例而言)。因此,只有当您需要支持任何时区,并且也希望能够,例如,默认为您的本地时区(对于有意识和天真的情况,无需编写所有代码的两个副本)。在
(另外,如果您首先要使用
dateutil
,那么您可能希望使用它不仅仅是为了获取时区,它基本上可以用datetime
和pytz
来替换您正在做的一切。)当然,除了这些库之外,还有其他选项可以搜索PyPI、Google和/或ActiveState recipes。在
如果要将UTC输入转换为本地时间,无论您在哪个时区,请尝试以下操作:
相当长的代码,但它只是简单地增加了时间.gmtime()和时间.本地时间()到从输入创建的时间元组。在
相关问题 更多 >
编程相关推荐