datetime.fromtimestamp vs datetime.utcfromtimestamp,哪一个更安全?

cyb*_*mon 8 python python-datetime

我正在从传感器收集一些数据,我从中获取时间戳,如下所示:

   "time": {
            "seconds": 40, 
            "year": 115, 
            "month": 5, 
            "hours": 7, 
            "time": 1434549820776, 
            "date": 17, 
            "minutes": 3, 
            "day": 3, 
            "timezoneOffset": 420
        },
Run Code Online (Sandbox Code Playgroud)

我有一个python脚本来处理来自传感器的数据(传入的数据是json格式),我取值time并转换成可读的时间格式.

我用过datetime.fromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S'),然后回来了'2015-06-17 15:03:40'

当作为datetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S') 退换:'2015-06-17 14:03:40'

你可以有一个小时的差异,所以我的问题是哪一个更好用?

Ser*_*sta 7

两者都是正确的,只是他们没有给你同样的时间.两者都假设时间戳是EPOCH的毫秒数(通常是1/01/1970 00:00 UTC),并且:

  • fromtimestamp 以当地时间为您提供日期和时间
  • utcfromtimestamp 为您提供UTC的日期和时间.

因为我不知道你住在哪里(英国?)我不能多说,在西班牙,法国,比利时和丹麦,当地时间冬天是UTC + 1,夏天是UTC + 2.

必须知道您是否需要UTC时间或当地时间.


Jul*_*nck 5

看看你的json,你可以看到时间戳对应于2015-06-17 07:03:40.

timezoneOffset告诉您本地时间和UTC时间之间有7个小时的差异=>与您的json对应的UTC时间是2015-06-17 14:03:40.

由于这是您在使用时获得的datetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S')(=>'2015-06-17 14:03:40'),这意味着您的时间戳以UTC时间写入,因此您应该使用,utcfromtimestamp如果您想要准确.