Python 3 如何格式化为 yyyy-mm-ddThh:mm:ssZ

8 浏览
0 Comments

Python 3 如何格式化为 yyyy-mm-ddThh:mm:ssZ

我是Python的新手,但无论如何我都找不到我需要的具体答案。我需要将时间戳格式化为这种确切的格式,包括'T'、'Z',没有子秒或毫秒,即yyyy-mm-ddThh:mm:ssZ,例如2019-03-06T11:22:00Z。关于解析这种格式的内容很多,但没有关于以这种方式格式化的内容。我几乎找到了一种方法,但它包含了我不需要的子秒。我尝试使用arrow并阅读他们的文档,但无法使任何东西正常工作。希望能得到帮助。

0
0 Comments

Python 3如何格式化为yyyy-mm-ddThh:mm:ssZ

问题的出现原因:

在ISO 8601中,“Z”表示“zulu time”或UTC(“+00:00”),而当地时间通常由其与UTC的偏移来指定。更糟糕的是,这些偏移可以因夏令时(DST)而在一年中发生变化。因此,除非您在冬天住在英国或夏天住在冰岛,否则您很可能没有那么幸运地与本地时间一起使用UTC,并且您的时间戳将完全错误。

解决方法:

为了正确处理这个问题,我们需要使用“aware” datetime对象,该对象考虑了时区的影响。以下是一个解决方法的示例代码:

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)
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').replace('+00:00', 'Z')  # '2020-08-28T02:57:54Z'
# Perfect UTC format
date_str = utc_dt.isoformat(timespec='milliseconds').replace('+00:00', 'Z')  # '2020-08-28T02:57:54.640Z'

上述代码中,我们首先创建了一个naive datetime对象,它表示本地时间。然后,我们将其转换为aware datetime对象,该对象考虑了时区的影响。接下来,我们将aware datetime对象转换为UTC时间,并使用ISO-8601格式进行格式化。最后,我们将格式化后的时间中的"+00:00"替换为"Z",以得到所需的UTC格式。

除了上述方法外,还有更简单的方法来实现相同的目标。以下是一个示例代码:

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)

上述代码定义了两个函数utcformat()和fromutcformat()。utcformat()函数将datetime对象转换为UTC格式的字符串,fromutcformat()函数将UTC格式的字符串转换为datetime对象。这些函数可以方便地处理时区和夏令时的问题。

Python 3中,要将日期时间格式化为yyyy-mm-ddThh:mm:ssZ(ISO 8601格式),需要考虑时区和夏令时的影响。通过使用“aware” datetime对象,并结合ISO-8601格式化方法和字符串替换操作,可以正确地将日期时间转换为所需的UTC格式。此外,还可以定义一些辅助函数来简化处理过程,并确保正确处理时区和夏令时的问题。

0
0 Comments

问题出现的原因:

问题是由于需要将当前时间以特定格式(yyyy-mm-ddThh:mm:ssZ)进行格式化,而原始代码没有提供这种格式化方式,所以需要找到解决方法。

解决方法:

通过使用Python的datetime模块,可以很方便地对日期和时间进行格式化操作。在这个问题中,使用datetime模块的strftime()方法,传入特定的格式字符串"%Y-%m-%dT%H:%M:%SZ",即可将当前时间格式化为所需的格式。

下面是解决问题的代码:

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

以上代码中,首先导入了datetime模块,然后使用now()方法获取当前时间,接着使用strftime()方法将时间格式化为"%Y-%m-%dT%H:%M:%SZ"的形式,最后将结果打印输出。

运行以上代码,即可得到当前时间的格式化结果。

0
0 Comments

问题的出现原因:

问题是用户需要将当前时间格式化为特定的格式(yyyy-mm-ddThh:mm:ssZ),但尝试使用datetime库的strftime函数时遇到了困难。

解决方法:

用户试图使用datetime库来解决问题,并使用strftime函数将当前时间格式化为所需的格式。但是,由于strftime函数默认会包含毫秒或子秒的信息,所以用户需要将这些信息去除。用户尝试了一些代码,并最终成功地将当前时间格式化为所需的格式。

整理后的文章如下:

尝试使用datetime库

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

更多信息,请参考Python文档。

感谢您的建议,但这样会包含毫秒或子秒的信息,我需要去除这些信息。不过,在尝试您给出的代码后,我成功地解决了问题。

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

0