2011-11-28 18 views
2

我在Python 2.5中和在App Engine上运行,做分页的代码看起来像:为什么strptime和strftime的行为不同,你对此做了什么?

NEXT_FORMAT = "%Y-%m-%d %H:%M:%S" 

current = model.completed_on.strftime(NEXT_FORMAT) 

completed_before = datetime.datetime.strptime(current, NEXT_FORMAT) 

时不时的strftime会退出一段时间,看起来像2011-11-24 05:13:54.355436然后strptime将炸毁尝试与吃

ValueError: unconverted data remains: .355436 

那么,为什么,如果你使用的是说,%S是一种格式秒钟一个十进制数它创造一个浮点数?而且这将会发生,为什么不以相同的方式处理它呢?

+0

可以在调用strftime之前记录completed_on的值吗?看起来很奇怪,strftime在你没有要求的时候会在微秒处理。 –

+0

到目前为止,我的解决方案是执行current.split('。')[0]来完成工作。我认为这是我在Python中遇到的第一个脚趾擦伤,其他一切都按预期工作。 – boatcoder

回答

7

它改成这样:

NEXT_FORMAT = "%Y-%m-%d %H:%M:%S.%f" 

这将微秒部分转化为好。或者,如果您想剥离微秒,您可以在调用strptime之前使用替换。

current = current.replace(microsecond=0) 
+1

我相信'%f'是在2.6中加入的,而OP似乎是在使用2.5。 – donkopotamus

+0

好的。在这种情况下,我认为在任何调用strptime之前都必须调用replace。我想知道微秒是从哪里来的。 –

+0

strftime肯定会由本地c实现完成,将有趣的知道什么平台正在被观察... – donkopotamus

相关问题