Python 日期时间变量格式的字符串
好的,到目前为止,我将字符串转换为日期:Python 日期时间变量格式的字符串,python,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 所以我想我的第一个问题是
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 if,它仍将返回正常日期。如果秒丢失了相同的情况等等
问候,,
Bogdan您缺少毫秒,因为strtime返回一个没有毫秒字段的值,并将秒存储为整数。从那时起,您的结果将丢失毫秒。获取毫秒的正确方法是使用datetime模块的strTime,如下所示:
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)
您还可以为丢失的秒等添加额外的级别。我想mktime可能会丢失它,它应该返回自1970年1月1日以来以秒为单位的unix时间戳。事实上,fromtimestamp期望这种时间戳。
.573979
-看起来像微秒,而不是毫秒。谢谢,我真的不记得我为什么要这个时间戳了。