我想编写一个函数,该函数接受一个字符串并返回True一个有效的ISO-8601日期时间(精确到微秒,包括时区偏移量),False否则返回。
我发现其他 问题提供了不同的解析日期时间字符串的方式,但是我只想返回TrueISO-8601格式。除非对不匹配ISO-8601的格式抛出错误,否则解析不会对我有帮助。
(我在代码的其他地方使用了漂亮的箭头库。arrow欢迎使用该解决方案。)
编辑:似乎在通用Python日期时间包中不存在“此字符串是否为有效的ISO 8601日期时间”的常规解决方案。
因此,为了使这个问题更窄,更具体和可回答,我将选择一种格式字符串,该格式字符串将验证以下格式的日期时间字符串:
'2016-12-13T21:20:37.593194+00:00'
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用:
format_string = '%Y-%m-%dT%H:%M:%S.%f%z'
datetime.datetime.strptime(my_timestamp, format_string)
Run Code Online (Sandbox Code Playgroud)
这给出:
ValueError: time data '2016-12-13T21:20:37.593194+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
Run Code Online (Sandbox Code Playgroud)
问题似乎在于UTC偏移(+00:00)中的冒号。如果我使用不带冒号的偏移量(例如'2016-12-13T21:20:37.593194+0000'),则可以按预期正确解析。显然,这是因为datetime的%z令牌不尊重带有冒号的UTC偏移量格式,只有不包含冒号的格式,即使这两个规范均有效。
正如问题所说,我有一系列字符串,如'2020-01-06T00:00:00.000Z'. 如何将本系列转换为datetime使用 Python?大熊猫的首选方法。如果没有,是否有任何方法可以解决此任务?谢谢大家。
string '2020-01-06T00:00:00.000Z'
convert to 2020-01-06 00:00:00 under datetime object
Run Code Online (Sandbox Code Playgroud) 我正在使用Python。我的时间格式是这样的
2020-05-23T06:35:11.418279Z #May 23, 2020 at 12:05:11 PM GMT+05:30
Run Code Online (Sandbox Code Playgroud)
我想转换成人类可读的时间,比如
23-05-2020 12:05 PM
Run Code Online (Sandbox Code Playgroud)
我也尝试过解析器。但没有效果。
谁能帮我这个?
提前致谢 :)
那么,我想将 UTC 日期时间转换2021-08-05 10:03:24.585Z为印度日期时间,如何转换呢?
我尝试的是
from datetime import datetime
from pytz import timezone
st = "2021-08-05 10:03:24.585Z"
datetime_object = datetime.strptime(st, '%Y-%m-%d %H:%M:%S.%fZ')
local_tz = timezone('Asia/Kolkata')
start_date = local_tz.localize(datetime_object)
print(start_date.replace(tzinfo=local_tz))
Run Code Online (Sandbox Code Playgroud)
但输出仍然不符合我提到的如何转换时间并打印时间的时区。
输出:
2021-08-05 10:03:24.585000+05:21
Run Code Online (Sandbox Code Playgroud) 在Python 3.10.8中,如果我写
from datetime import datetime
print(datetime.fromisoformat('2011-11-04T00:05:23Z'))
Run Code Online (Sandbox Code Playgroud)
我收到错误
from datetime import datetime
print(datetime.fromisoformat('2011-11-04T00:05:23Z'))
Run Code Online (Sandbox Code Playgroud)
这是令人惊讶的,因为这个例子是直接取自datetime模块文档的:
>>> from datetime import datetime
# ...
>>> datetime.fromisoformat('2011-11-04T00:05:23Z')
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc)
Run Code Online (Sandbox Code Playgroud)
这是文档中的错误还是错误?
我正进入(状态
time data '2015-02-10T13:00:00Z' does not match format '%Y-%m-%d %H:%M:%S'
Run Code Online (Sandbox Code Playgroud)
我试过了:
import datetime
datetime.datetime.strptime('2015-02-10T13:00:00Z', '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
和
import time
time.strptime('2015-02-10T13:00:00Z', '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有以这种格式返回日期的网址
url_date = "2015-01-12T08:43:02Z"
Run Code Online (Sandbox Code Playgroud)
我不知道为什么有字符串,它会更容易得到它,因为"2015-01-1208:43:02"它可以更简单地解析使用
datetime.datetime.strptime(url_date , '%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我试过了
%Y-%m-%d
%Y-%m-%d-%H-%M-%S
%Y-%m-%d-%H-%M-%S-%Z
Run Code Online (Sandbox Code Playgroud)
但我一直得到像"时间数据2015-01-12T08:43:02Z不匹配......"的错误
如何将ISO8601时间格式的字符串转换为python3 datetime.这是我的时间:
2017-03-03T11:30:00+04:00Run Code Online (Sandbox Code Playgroud)
我尝试的方式:
datetime.strptime(appointment['datetime'], '%Y-%m-%dT%H:%M:%S%z')Run Code Online (Sandbox Code Playgroud)
这里的问题是,我不知道如何在.strptime方法的格式参数中表示+4:00时区.
2022-02-18T00:00:00.000Z该字符串中的信息表明该时间为07:00 PM东部时间 (ET),该信息显示正确,因为 ET 比 UTC 晚 5 小时。我们如何(a)首先从字符串转换为(日期时间?,时间戳?),然后将结果时间对象转换为07:00 PM?已经尝试过的:
from datetime import datetime
datetime.strptime('2022-02-18T00:00:00.000Z', '%Y-%m-%dT%H:%M:%S.%f')
Run Code Online (Sandbox Code Playgroud)
...这会引发错误time data '2022-02-18T00:00:00.000Z' does not match format '%Y-%m-%d %H:%M:%S.%f'。这里做错了什么?
我想将 UTC TimeDate 标记字符串转换为毫秒的整数值(可能需要是 64 位数量),以便在存储在 mySQL 数据库列中时占用更少的空间。这个 UTC 字符串是从另一个库生成的,我将它存储为一种每用户 GUID。
datetime 或 dateutil 能否将其转换为单个整数值(例如“自纪元以来的毫秒数”)?还是我需要自己做?
使用这种方法解析:
myDateTime = dateutil.parser.parse("2015-06-27T02:10:05.653000Z")
print("Parsed datetime String is {0}, ordinal value is {1}".format(myDateTime, myDateTime.toordinal()))
Run Code Online (Sandbox Code Playgroud)
给出输出:
Parsed datetime String is 2015-06-27 02:10:05.652999+00:00, ordinal value is 735776
Run Code Online (Sandbox Code Playgroud)
...它只给出日期的序数值。此外,如果我有一个整数 653 毫秒的时间,那么我希望解析的对象知道它有 653 毫秒,而不是 652999。
python ×10
datetime ×8
python-3.x ×4
iso8601 ×2
arrow-python ×1
date ×1
django ×1
epoch ×1
mysql ×1
pandas ×1
python-2.7 ×1
strftime ×1
strptime ×1
time ×1
timezone ×1
validation ×1