随意添加您最喜欢的模块,但到目前为止,我们已经有了time
, datetime
, dateutil
, pytz
, 和locale
处理,因为PEP-431尚未实施,为我们提供了一种统一、具体的方式来处理时区及其相关的怪事比如在夏令时切换期间出现两次的模糊日期时间,或者根本不出现。无论如何,我的问题相当平淡,但我似乎找不到答案。
背景故事:我正在为Sublime Text开发一个小插件,最初将允许用户在当前文档中插入时间戳(以他们指定的格式,回退到默认值)。最终它将在保存时更新时间戳,但这与此处无关。这是我简短的、独立的示例代码:
import sublime_plugin
from datetime import datetime as dt
class TimeStampCommand(sublime_plugin.TextCommand):
def run(self, edit):
stamp = dt.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC") # 2013-10-10 22:38:40 UTC
for r in self.view.sel():
if r.empty():
self.view.insert(edit, r.a, stamp)
else:
self.view.replace(edit, r, stamp)
从格式化选项列表中,我应该能够添加%Z
并获取本地时区:
stamp = dt.now().strftime("%Y-%m-%d %H:%M:%S %Z") # should be 2013-10-10 18:38:40 EDT
或稍微修改它并获得更通用的 UTC 偏移量:
stamp = dt.now().strftime("%Y-%m-%d %H:%M:%S UTC %z") # should be 2013-10-10 18:38:40 UTC -0400
不幸的是,情况并非如此,因为返回的时间dt.now()
是“幼稚的”——它没有附加任何时区信息。我可以使用datetime.tzinfo
,但无济于事,这只是一个抽象基类,因为时区混乱而复杂并且变化很大。所以,对于我的问题的根源:我如何创建一个可以利用完整数组的“感知” time
///对象datetime
dateutil
whatever
strftime()
格式化选项?我希望用户能够根据自己的语言环境(我需要以某种方式检测到这一点)或根据提供的语言来随意格式化时间戳。最好我希望它在 Windows、Mac 和 Linux(Sublime Text 支持的平台)上工作。最后,如果 Python 2.6 和 3.3(分别为 ST2 和 ST3 的内置解释器版本)之间存在差异,我想知道它们。
请注意,我并不是要您为我编写所有代码,我想自己学习。我只需要一些好的指示来朝着正确的方向前进,因为我一天中的大部分时间都在旋转我的车轮。至少,弄清楚如何生成2013-10-10 18:38:40 UTC -0400
将是一个很好的开始,尽管其他东西也会非常好:)