我用过:
utctime = datetime.datetime(1601,1,1) + datetime.timedelta(microseconds = tup[5])
last_visit_time = "Last visit time:"+ utctime.strftime('%Y-%m-%d %H:%M:%S')
但我有1601的时间,所以错误显示:
ValueError: year=1601 is before 1900; the datetime strftime() methods require year >= 1900
我使用python2.7,我该怎么做?非常感谢!
答案 0 :(得分:14)
您可以执行以下操作:
>>> utctime.isoformat()
'1601-01-01T00:00:00.000050'
现在,如果你想拥有与上面完全相同的格式:
iso = utctime.isoformat()
tokens = iso.strip().split("T")
last_visit_time = "Last visit time: %s %s" % (tokens[0], tokens[1].strip().split(".")[0])
并非strftime
似乎有修补此行为的补丁here(未经测试)
答案 1 :(得分:11)
isoformat
方法接受一个参数,该参数指定将日期部分与日期时间obj的时间部分划分的字符。因此:
>>> utctime.isoformat(" ")
'1601-01-01 00:00:00.000050'
应该这样做。 此外,如果要删除微秒,则可以进行拆分。
>>> utctime.isoformat(" ").split(".")[0]
'1601-01-01 00:00:00'
答案 2 :(得分:9)
有多种方法可以改变strftime
以便它处理1900年以前的日期:
strftime
方法,您可以使用日期对象调用该方法:aspn_recipe.strftime(dt, fmt)
如果您自己在模块中设置它1.5
开始,virtualtime包会同时修补time.strftime
和datetime.datetime.strftime
,以便像在Python 3.3
+中一样。您可以在不启用其他虚拟时间功能的情况下利用此功能。 (免责声明:我正在使用此软件包)请注意,Python 2.7
,3.0
和3.1
在1900年之前有错误,Python 3.2
在1000年之前有错误。此外,前{{1}版本将3.2
和0
之间的年份解释为99
和1969
之间的年份。 2068
以后的Python版本支持3.3
中的所有正年(以及datetime
中的负年),time.strftime
不会对time.strftime
之间的年份进行任何映射}和0
。
原始Python bug解释说他们认为这是Python 2.7中的一个功能(可能是因为它避免了对这些日期缺乏系统99
支持),然后在Python中逐步使用它3系列,重新实现功能。
答案 3 :(得分:7)
我建议使用arrow(这是datetime和dateutil上的抽象包),它很容易处理各种日期时间对象,即使在Python 2.6 / 7.x和1900之前的日期也是如此。< / p>
例如:
stream.read(buffer);