我正在向 Bitbucket API 响应中添加 UTC 时间字符串,这些响应目前仅包含阿姆斯特丹 (!) 时间字符串。为了与其他地方返回的 UTC 时间字符串保持一致,所需的格式为2011-11-03 11:07:04(后跟+00:00,但这不相关)。
2011-11-03 11:07:04
+00:00
从具有微秒组件的实例创建这样的字符串(没有微秒组件)的最佳方法是什么?datetime
datetime
>>> import datetime >>> print unicode(datetime.datetime.now()) 2011-11-03 11:13:39.278026
我会添加我想到的最佳选项作为可能的答案,但可能还会有更优雅的解决方案。
编辑:我应该提到,我实际上并没有打印当前时间——我曾经datetime.now提供了一个快速示例。因此,解决方案不应假设datetime它收到的任何实例都将包含微秒组件。
datetime.now
要从实例(可能有或没有微秒)创建UTC不带微秒组件的时间字符串,您可以通过使用 格式化对象来实现。此方法允许您控制输出格式,并且您可以简单地省略微秒组件(如果存在)。datetime``datetime``strftime
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如果实例尚未采用 UTC,则可以使用pytz模块或 Python 3 中的内置timezone支持将其转换为 UTC。例如:
pytz
timezone
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。
datetime.timezone.utc