字符串转换为日期时间变量格式

2 投票
1 回答
4502 浏览
提问于 2025-04-17 00:40

好的,我现在正在把字符串转换成日期,方法是:

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)

你还可以为缺少秒数等情况添加更多的处理方式。

撰写回答