【问题标题】:python3 TimeStamp off by 2 hourspython3时间戳关闭2小时
【发布时间】:2017-04-11 06:38:48
【问题描述】:

我对 python 有点陌生,但在使用时间戳、utc 和 unixtime 时遇到了困难。

这个例子延迟了 2 小时:

sec_in_day=86400
today = datetime.datetime.utcnow() 
print(today)

two_days_ago=today.timestamp()-(sec_in_day*2);
print("Two days ago (unix)",two_days_ago)

# Convert timestamp via 3rd party 
tool:http://www.onlineconversion.com/unix_time.htm

#generated unix-timestamp is 2 hours early according to 3rd party tool

2017-04-11 06:36:49.414133

两天前(unix)1491712609.414133

通过在线工具转换 1491712609.414133 给我

格林威治标准时间 2017 年 4 月 9 日星期日 04:36:49

预计 2017 年 4 月 9 日星期日 06:36:49 GMT

【问题讨论】:

    标签: python-3.x datetime time


    【解决方案1】:

    这解决了我的问题

    sec_in_day=86400
    today = datetime.datetime.utcnow() 
    
    timestamp = today.replace(tzinfo=timezone.utc).timestamp()
    print("Today",today)
    print("Today-Re", today.replace(tzinfo=timezone.utc))
    print("TS",timestamp)
    print("TS#2",(timestamp-(sec_in_day*2)))
    

    【讨论】:

      【解决方案2】:

      我相信一切都按设计进行。

      首先你要做:

      today = datetime.datetime.utcnow()
      

      采用 UTC,没有夏令时调整,没有本地时区调整。

      然后你做:

      today.timestamp()
      

      根据docs 是当地时间,因此它包括对夏令时以及当地时区的调整。

      这解释了 2 小时的差异。

      您可能想查看的是today - datetime.timedelta(days=2)

      【讨论】:

      • 但是我没有通过 datetime.datetime.utcnow() 将其转换为 UCT
      • 如何获得两天前的 UTC unixtimestamp?
      • ,UTC 时间戳仍然关闭 newday=today - datetime.timedelta(days=2) print("ND",newday) print("ND",newday.timestamp())跨度>
      • 全部在docs "注意没有方法可以直接从代表UTC时间的原始日期时间实例获取POSIX时间戳。如果您的应用程序使用此约定并且您的系统时区未设置对于 UTC,您可以通过提供 tzinfo=timezone.utc:" 获取 POSIX 时间戳,也许您不应该以 .utcnow() 开头并一直使用本地时间。不管怎样,我建议你阅读文档并尝试datetime的不同功能
      【解决方案3】:

      下面的代码也可以使用

      sec_in_day=86400
      today = datetime.datetime.utcnow() 
      print(today)
      
      two_days_ago=today.timestamp()-(sec_in_day*2);
      
      print("Two days ago (unix): ",datetime.datetime.fromtimestamp(two_days_ago).strftime('%Y-%m-%d %H:%M:%S.%f'))
      

      在此我使用了 fromtimestamp(two_days_ago).strftime('%Y-%m-%d %H:%M:%S.%f')) 函数,它将转换纪元时间变成可读的形式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多