我试图解码一个日期字符串到历元,但我有困难得到时区。这是Amazon S3密钥的最后修改日期。
time.strptime(key.last_modified, '%Y-%m-%dT%H:%M:%S.%Z') ValueError: time data u'2013-10-20T00:41:32.000Z' does not match format '%Y-%m-%dT%H:%M:%S.%Z'
如果我去掉时区(. 000Z),它就能工作,但我也需要时区。
mm5n2pyu1#
.000Z未被识别为时区偏移。实际上,您有 * 毫秒 * 和一个时区(Z是UTC),并且 * 正式地 *,time.strptime()解析器不能处理毫秒。在 * 某些 * 平台上,%f将解析微秒部分,然后丢弃信息。然而,datetime.datetime.strptime()类方法 * 可以 *,但 * 不能 * 时区;将Z解析为文字,它可以工作:
.000Z
Z
time.strptime()
%f
datetime.datetime.strptime()
from datetime import datetime datetime.strptime(key.last_modified, '%Y-%m-%dT%H:%M:%S.%fZ')
演示:
>>> from datetime import datetime >>> import time >>> example = u'2013-10-20T00:41:32.000Z' >>> datetime.strptime(example, '%Y-%m-%dT%H:%M:%S.%fZ') datetime.datetime(2013, 10, 20, 0, 41, 32) >>> time.strptime(example, '%Y-%m-%dT%H:%M:%S.%fZ') time.struct_time(tm_year=2013, tm_mon=10, tm_mday=20, tm_hour=0, tm_min=41, tm_sec=32, tm_wday=6, tm_yday=293, tm_isdst=-1)
请注意,在我的Mac OS X笔记本电脑上,%f适用于time.strptime();然而,它不能保证在任何地方都有效。可以使用datetime.timetuple()方法将datetime.datetime()对象转换为时间元组。
datetime.timetuple()
datetime.datetime()
zynd9foi2#
2013-10-20T00:41:32.000Z在这个字符串中,32.000是精确到千位的秒。“Z”是UTC的时区,俗称祖鲁时间。如果你看一下Python 2.x文档中的这个表,%S参数只能处理[00,61]范围,不包括小数点。61是用来计算闰秒的。这就是字符串格式不匹配的原因。您需要从字符串中删除小数点后的三个零。
2013-10-20T00:41:32.000Z
%S
cedebl8k3#
enter code here import datetime `` enter code here time_in_seconds = datetime.datetime.strptime('13:12:2022,23:00:00', '%d:%m:%Y,%H:%M:%S')).timestamp()但是,可以使用以下代码来确保转换考虑时区。import datetimeimport pytzdatetime_tuple = datetime.datetime.strptime('13:12:2022,23:00:00', '%d:%m:%Y,%H:%M:%S')output : datetime.datetime(2022, 12, 13, 23, 0)timezone = pytz.timezone('Appropriate_Time_Zone')datetime_timezone = pytz. utc.localize(datetime_tuple)time_in_seconds = datetime_timezone.timestamp()
enter code here
time_in_seconds = datetime.datetime.strptime('13:12:2022,23:00:00', '%d:%m:%Y,%H:%M:%S')).timestamp()
import datetime
import pytz
datetime_tuple = datetime.datetime.strptime('13:12:2022,23:00:00', '%d:%m:%Y,%H:%M:%S')
output : datetime.datetime(2022, 12, 13, 23, 0)
timezone = pytz.timezone('Appropriate_Time_Zone')
datetime_timezone = pytz. utc.localize(datetime_tuple)
time_in_seconds = datetime_timezone.timestamp()
例如,timezone = pytz.timezone('Europe/Vienna')
3条答案
按热度按时间mm5n2pyu1#
.000Z
未被识别为时区偏移。实际上,您有 * 毫秒 * 和一个时区(Z
是UTC),并且 * 正式地 *,time.strptime()
解析器不能处理毫秒。在 * 某些 * 平台上,%f
将解析微秒部分,然后丢弃信息。然而,
datetime.datetime.strptime()
类方法 * 可以 *,但 * 不能 * 时区;将Z
解析为文字,它可以工作:演示:
请注意,在我的Mac OS X笔记本电脑上,
%f
适用于time.strptime()
;然而,它不能保证在任何地方都有效。可以使用
datetime.timetuple()
方法将datetime.datetime()
对象转换为时间元组。zynd9foi2#
2013-10-20T00:41:32.000Z
在这个字符串中,32.000是精确到千位的秒。“Z”是UTC的时区,俗称祖鲁时间。
如果你看一下Python 2.x文档中的这个表,
%S
参数只能处理[00,61]范围,不包括小数点。61是用来计算闰秒的。这就是字符串格式不匹配的原因。您需要从字符串中删除小数点后的三个零。cedebl8k3#
将日期、时间戳字符串转换为秒。
enter code here
import datetime `` enter code heretime_in_seconds = datetime.datetime.strptime('13:12:2022,23:00:00', '%d:%m:%Y,%H:%M:%S')).timestamp()
但是,可以使用以下代码来确保转换考虑时区。
import datetime
import pytz
datetime_tuple = datetime.datetime.strptime('13:12:2022,23:00:00', '%d:%m:%Y,%H:%M:%S')
output : datetime.datetime(2022, 12, 13, 23, 0)
timezone = pytz.timezone('Appropriate_Time_Zone')
datetime_timezone = pytz. utc.localize(datetime_tuple)
time_in_seconds = datetime_timezone.timestamp()
设置时区pytz提供了一个时区列表:
例如,timezone = pytz.timezone('Europe/Vienna')