字符串转换为日期时间变量格式
好的,我现在正在把字符串转换成日期,方法是:
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
所以我第一个问题是,毫秒去哪儿了?
我的第二个问题是,有没有办法让字符串到时间的转换变得“动态”?我的意思是,比如在我之前的例子中,如果没有毫秒,程序不会报错,而是仍然返回一个正常的日期。如果缺少秒也是同样的情况,依此类推?
祝好,
博格丹
1 个回答
2
你缺少毫秒的原因是因为 strptime 返回的是一个 时间元组,这个元组里没有毫秒这个字段,它只把秒数当作整数来存储。从那之后,你的结果就没有毫秒了。获取毫秒的正确方法是使用 datetime 模块的 strptime,像这样:
parsed = datetime.datetime.strptime(date_string, DB_TIME_FORMAT)
这样做也简化了你的解决方案,因为看起来你最终还是想得到一个 datetime 对象。
至于接受的格式比较宽松,这在 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)
你还可以为缺少秒数等情况添加更多的处理方式。