代码之家  ›  专栏  ›  技术社区  ›  TeXnophobe

为什么datetime之间存在差异。日期时间。现在()。timestamp()和datetime。日期时间。utcnow()。时间戳()?

  •  4
  • TeXnophobe  · 技术社区  · 6 年前

    据我所知,Unix时代(1970-01-01 00:00:00)以来的秒数 UTC公司 )全球各地都应该是一样的,因为它固定为UTC。

    现在,如果您所在的时区的时间为小时+/-UTC,那么如果您这样做,为什么会得到不同的时间戳(在我的情况下为2小时)

    >>> datetime.datetime.utcnow().timestamp()
    1523622844.637763
    >>> datetime.datetime.now().timestamp()
    1523630048.558158
    

    如果您考虑到我运行第二行代码所花费的时间,您就会得出结论,这两个时间戳之间存在7200秒(2小时)的差异。这些时间戳不应该是不知道时区的吗?

    3 回复  |  直到 6 年前
        1
  •  2
  •   floatingpurr    6 年前

    docs :

    • datetime.now() :返回当前 地方的 日期和时间。
    • datetime.utcnow() :返回当前UTC日期和时间[…]。这就像 now() ,但返回当前UTC日期和时间 datetime

    举个例子:

    抵消

    In [1]: datetime.datetime.now()
    Out[1]: datetime.datetime(2018, 4, 13, 17, 8, 4, 457551)
    
    In [2]: datetime.datetime.utcnow()
    Out[2]: datetime.datetime(2018, 4, 13, 15, 8, 5, 385598)
    

    无偏移量

    In [3]: datetime.datetime.now(tz=pytz.utc)
    Out[3]: datetime.datetime(2018, 4, 13, 15, 8, 59, 590874, tzinfo=<UTC>)
    
    In [4]: datetime.datetime.utcnow()
    Out[4]: datetime.datetime(2018, 4, 13, 15, 9, 1, 494370)
    
        2
  •  1
  •   pills    6 年前

    datetime.now() utcnow() TZ不知道(即默认值 tzinfo None )。

    从文档中( https://docs.python.org/3.6/library/datetime.html#datetime.datetime.timestamp ):

    假定原始datetime实例表示本地时间

    至关重要的是:

    注意:没有方法直接从 表示UTC时间的朴素datetime实例。如果您的应用程序 使用此约定,并且您的系统时区未设置为UTC,则您 可以通过提供 tzinfo=timezone.utc : timestamp = dt.replace(tzinfo=timezone.utc).timestamp() 或由 直接计算时间戳:

    timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

    换句话说,在您的示例中,时间戳的正确值是第二个值(使用 now() )。

        3
  •  0
  •   floatingpurr    6 年前

    计算机的BIOS可能设置为本地时间,而不是UTC时间。通常,对于运行unix(如操作系统)的系统,UTC时间是标准时间。对于运行Windows的系统,通常使用本地时间。now()应显示与您在计算机时钟上看到显示的时间相同的时间,而。utcnow()不知道操作系统中设置的时区偏移量,它显示UTC日期和时间。