Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日期时间变量格式的字符串_Python - Fatal编程技术网

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
-看起来像微秒,而不是毫秒。谢谢,我真的不记得我为什么要这个时间戳了。