好的,所以我到目前为止将字符串转换为日期:
datetime.datetime.fromtimestamp(time.mktime(time.strptime(date_string, DB_TIME_FORMAT)))
但是我得到了一些奇怪的结果。例如:
date_string = '2011-08-30 12:52:57.573979'
DB_TIME_FORMAT = '%Y-%m-%d %H:%M:%S.%f'
结果是:
2011-08-30 12:52:57
所以我猜我的第一个问题是毫秒在哪里?
我的第二个问题是有没有办法让时间转换的“动态”字符串?我的意思是,我的意思是,对于前一个示例中的格式,如果毫秒不存在,而不是获得ValueError,如果仍然会返回正常日期。如果秒缺少相同的情况等等?
的问候, 波格丹
答案 0 :(得分:2)
你错过了毫秒,因为strptime返回一个没有毫秒字段的time tuple,并将秒存储为整数。从那时起,您的结果将缺少毫秒。获得毫秒的正确方法是使用datetime模块的strptime,如下所示:
parsed = datetime.datetime.strptime(date_string, DB_TIME_FORMAT)
这也简化了您的解决方案,因为您似乎想要最终得到日期时间。
就可接受的格式而言,这在Python中并不容易;它的日期/时间模块没有像某些语言那样“自动检测”。如果不使用第三方库,我认为您最好捕获异常并使用不同的格式重试。例如:
from datetime import datetime
try: parsed = datetime.strptime(date_string, DB_TIME_FORMAT)
except ValueError:
parsed = datetime.strptime(date_string, DB_TIME_FORMAT_WITHOUT_MILLISECONDS)
你可以为缺少的秒数添加额外的等级,等等。