如何在Python中获取UTC时间?

18 浏览
0 Comments

如何在Python中获取UTC时间?

如何获取UTC时间,即1970年1月1日Unix纪元以来的毫秒数?

0
0 Comments

如何在Python中获取UTC时间?

问题的出现原因:

Python中没有直接获取UTC时间的函数或方法,因此需要使用其他方式来获取UTC时间。

解决方法:

1. 使用datetime模块中的utcnow()函数来获取UTC时间。代码如下:

import datetime
def UtcNow():
    now = datetime.datetime.utcnow()
    return now

2. 如果需要获取从1970-01-01开始的秒数而不是Python的datetime对象,可以使用以下代码:

return (now - datetime.datetime(1970, 1, 1)).total_seconds()

3. 在Python 3.2中引入了datetime.timezone类,使得所有人都可以使用正确的UTC时区。现代版本的解决方法如下:

def utc_now():
   return datetime.datetime.now(tz=datetime.timezone.utc)

以上所有方法都可以获取UTC时间,但第三种方法被认为是最现代化和最佳的实践方法。

注意事项:

- Python的命名约定与JavaScript的命名约定不同,详见PEP 8。

- 如果只是为了让函数更易于访问,可以通过简单地赋值来为函数创建另一个名称。

以上内容中的代码为获取UTC时间的不同方法和注意事项,其中第三种方法被认为是最佳实践。

0
0 Comments

问题的原因是获取Python中的UTC时间,并提供解决方法。以下是解决方法的整理:

方法一:使用Timezone-aware datetime对象

from datetime import datetime,timezone
now_utc = datetime.now(timezone.utc)

方法二:获取自Unix纪元以来的毫秒时间戳

datetime.now(timezone.utc).timestamp() * 1000

据Python 3文档介绍,这是推荐的方法。这种方法简洁易懂,应该是首选方式。

是的,这现在应该是首选方式。当最初提出问题时,`timezone.utc`并不存在。

如果您希望获取本地时间(例如,为了更方便地向用户显示),但仍然具有时区安全性,可以使用`datetime.now().astimezone()`。

0
0 Comments

问题的出现原因是需要获取Python中的UTC时间。解决方法是根据Python版本选择相应的函数来获取UTC时间。

对于Python 2代码,可以使用datetime.utcnow()函数来获取UTC时间。

from datetime import datetime
datetime.utcnow()

对于Python 3,可以使用datetime.now(timezone.utc)函数来获取UTC时间。虽然Python 2中的datetime.utcnow()函数也可以获取UTC时间,但是在Python 3的文档中有一个巨大的警告。

from datetime import datetime, timezone
datetime.now(timezone.utc)

当需要计算两个日期之间的时间差时,只需要将结束日期减去开始日期即可。计算结果是一个timedelta对象。

根据Python文档,timedelta对象可以获取它定义中提到的任何字段,包括days、seconds、microseconds、milliseconds、minutes、hours和weeks。timedelta实例还具有total_seconds()方法,可以返回时间间隔包含的总秒数。

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

关于datetime.utcnow()函数的一个可能令人不悦的惊喜是,尽管名称中含有时区(UTC),但它并不返回一个带有时区信息的对象。这在我看来是一个很大的问题,这也是我更喜欢下面的解决方法的原因。

所谓的naive datetime对象(即没有设置时区信息的对象)确实有其用途:我希望我的闹钟每天早上6点钟响,无论我身在何处。它还允许在计算机游戏中使用"虚拟时钟":现在是我的幻想世界中的下午5点钟。强制给datetime对象设置时区将会很麻烦,特别是在进行timedelta运算时。

0