Python 3如何格式化到yyyy-mm-ddthh:mm:ssz



我是Python的新手,我一生无法在网上找到我的特定答案。我需要将时间戳格式化为此精确格式,以包括" t"," z",并且没有像这样的子或miriseconds yyyy-mm-ddthh:mm:mm:ssz I.E. 2019-03-06T11:22:00z。解析这种格式有很多东西,但没有以这种方式格式化。我几乎让它上班的唯一方法涉及我不需要的子秒。我已经尝试使用箭头并阅读他们的文档,但无法使任何工作。任何帮助将不胜感激。

尝试datetime

import datetime
output_date = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
print(output_date)

有关更多信息,请参阅Python文档。

请小心。只是原因可以将日期格式化看起来像UTC,并不意味着它是准确的。

在ISO 8601中," Z"是指" Zulu Time"的指定。或UTC(' 00:00')。虽然当地时代通常由UTC偏移指定。更糟糕的是,由于夏令时(DST),这些偏移会在一年中发生变化。

因此,除非您在冬季或夏季冰岛住在英格兰,否则您可能没有足够的幸运,无法在本地与UTC合作,您的时间戳将是完全错误的。

python3.8

from datetime import datetime, timezone
# a naive datetime representing local time
naive_dt = datetime.now()
# incorrect, local (MST) time made to look like UTC (very, very bad)
>>> naive_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
'2020-08-27T20:57:54Z'   # actual UTC == '2020-08-28T02:57:54Z'
# so we'll need an aware datetime (taking your timezone into consideration)
# NOTE: I imagine this works with DST, but I haven't verified
aware_dt = naive_dt.astimezone()
# correct, ISO-8601 (but not UTC)
>>> aware_dt.isoformat(timespec='seconds')
'2020-08-27T20:57:54-06:00'
# lets get the time in UTC
utc_dt = aware_dt.astimezone(timezone.utc)
# correct, ISO-8601 and UTC (but not in UTC format)
>>> utc_dt.isoformat(timespec='seconds')
'2020-08-28T02:57:54+00:00'
# correct, UTC format (this is what you asked for)
>>> date_str = utc_dt.isoformat(timespec='seconds')
>>> date_str.replace('+00:00', 'Z')
'2020-08-28T02:57:54Z'
# Perfect UTC format
>>> date_str = utc_dt.isoformat(timespec='milliseconds')
>>> date_str.replace('+00:00', 'Z')
'2020-08-28T02:57:54.640Z'

我只是想说明上面的一些事情,有很多简单的方法:

from datetime import datetime, timezone

def utcformat(dt, timespec='milliseconds'):
    """convert datetime to string in UTC format (YYYY-mm-ddTHH:MM:SS.mmmZ)"""
    iso_str = dt.astimezone(timezone.utc).isoformat('T', timespec)
    return iso_str.replace('+00:00', 'Z')

def fromutcformat(utc_str, tz=None):
    iso_str = utc_str.replace('Z', '+00:00')
    return datetime.fromisoformat(iso_str).astimezone(tz)

now = datetime.now(tz=timezone.utc)
# default with milliseconds ('2020-08-28T02:57:54.640Z')
print(utcformat(now))
# without milliseconds ('2020-08-28T02:57:54Z')
print(utcformat(now, timespec='seconds'))

>>> utc_str1 = '2020-08-28T04:35:35.455Z'
>>> dt = fromutcformat(utc_string)
>>> utc_str2 = utcformat(dt)
>>> utc_str1 == utc_str2
True
# it even converts naive local datetimes correctly (as of Python 3.8)
>>> now = datetime.now()
>>> utc_string = utcformat(now)
>>> converted = fromutcformat(utc_string)
>>> now.astimezone() - converted
timedelta(microseconds=997)

感谢Skaul05我设法获得了我需要的代码,它是

date = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
print(date)

带有f字符串,您可以将其缩短为:

来自DateTime Import DateTime

f'{dateTime.now():%y-%m-%dt%h:%m:%sz}'

信用转到如何将python datetime变成字符串,具有可读格式的日期?。

相关内容

  • 没有找到相关文章