小能豆

Python 日期时间转为不带微秒部分的字符串

javascript

我正在向 Bitbucket API 响应中添加 UTC 时间字符串,这些响应目前仅包含阿姆斯特丹 (!) 时间字符串。为了与其他地方返回的 UTC 时间字符串保持一致,所需的格式为2011-11-03 11:07:04(后跟+00:00,但这不相关)。

从具有微秒组件的实例创建这样的字符串(没有微秒组件)的最佳方法是什么?datetime

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

我会添加我想到的最佳选项作为可能的答案,但可能还会有更优雅的解决方案。

编辑:我应该提到,我实际上并没有打印当前时间——我曾经datetime.now提供了一个快速示例。因此,解决方案不应假设datetime它收到的任何实例都将包含微秒组件。


阅读 22

收藏
2024-10-06

共1个答案

小能豆

要从实例(可能有或没有微秒)创建UTC不带微秒组件的时间字符串,您可以通过使用 格式化对象来实现。此方法允许您控制输出格式,并且您可以简单地省略微秒组件(如果存在)。datetime``datetime``strftime

这是一个可能的解决方案:

解决方案:

import datetime

def format_datetime(dt):
    return dt.strftime('%Y-%m-%d %H:%M:%S')

# Example usage
now = datetime.datetime.now()
formatted_time = format_datetime(now)
print(formatted_time)

解释:

  • strftime('%Y-%m-%d %H:%M:%S')格式化datetime实例而不包括微秒,无论它们是否存在。
  • 这是一个干净的解决方案,即使datetime实例没有微秒也能有效,并且能始终保持所需的格式。

如果您还需要处理 UTC 转换:

datetime如果实例尚未采用 UTC,则可以使用pytz模块或 Python 3 中的内置timezone支持将其转换为 UTC。例如:

import datetime
import pytz

def format_utc_datetime(dt):
    dt_utc = dt.astimezone(pytz.UTC)
    return dt_utc.strftime('%Y-%m-%d %H:%M:%S')

# Example usage
now = datetime.datetime.now(pytz.timezone('Europe/Amsterdam'))
formatted_utc_time = format_utc_datetime(now)
print(formatted_utc_time)

如果您使用的是 Python 3.9+ 并且不想要额外的依赖,pytz则可以将其替换为datetime.timezone.utc

2024-10-06