字符串到日期时间变量格式

时间:2011-08-30 11:21:06

标签: python

好的,所以我到目前为止将字符串转换为日期:

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,如果仍然会返回正常日期。如果秒缺少相同的情况等等?

的问候, 波格丹

1 个答案:

答案 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)

你可以为缺少的秒数添加额外的等级,等等。