strftime()函数显示系统编译器和在线编译器中的不同行为

时间:2015-07-03 05:14:50

标签: python

其实我是python中的新手,而且代码让我很担心。

import time
from datetime import time, date, datetime

createdAt ='Wed Jan 12 11:45:28 +0000 2011' # createdAt value is read from a file
print 'CR= ',createdAt
struct_time = datetime.strptime(str(createdAt),'%a %b %d %H:%M:%S +0000 %Y').strftime('%s') # notice small s here
print "returned tuple: %s " % struct_time

我在编译器Python 2.7.10 Shell中遇到这样的错误

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    asd = datetime.strptime(str(createdAt),'%a %b %d %H:%M:%S +0000 %Y').strftime('%s')
ValueError: Invalid format string

但是在在线编译器中,我得到这样的输出(https://ideone.com/g0R2xw上的在线编译器)

CR=  Wed Jan 12 11:45:28 +0000 2011
returned tuple: 1294832728

我希望我的输出是这样的。如果你能告诉我这是如何计算的。 提前谢谢你......

1 个答案:

答案 0 :(得分:0)

来自documentation -

  

支持的全套格式代码因平台而异,因为Python调用平台C库的strftime()函数,并且平台变体很常见。要查看平台支持的完整格式代码集,请参阅strftime(3)文档。

所以问题是strftime()可以根据使用它的平台表现不同。

Python直接不支持任何%s(小s),但似乎linux系统支持它,这可能是它在在线编译器中工作的原因,它可以在linux环境中托管。它也适用于我的linux环境。

如果你想将python日期时间转换为epoch以来的秒数,你应该明确地这样做:

>>> import datetime
>>> (datetime.datetime.strptime(str(createdAt),'%a %b %d %H:%M:%S +0000 %Y') - datetime.datetime(1970,1,1)).total_seconds()
1294832728.0