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

时间:2015-06-18 16:56:53

标签: python python-datetime

我正从传感器收集一些数据,我从中得到时间戳:

   "time": {
            "seconds": 40, 
            "year": 115, 
            "month": 5, 
            "hours": 7, 
            "time": 1434549820776, 
            "date": 17, 
            "minutes": 3, 
            "day": 3, 
            "timezoneOffset": 420
        },

我有一个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'

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:0)

基本上你想用什么有效。理想情况下,您的文档将包含传感器报告时间的时区。可能它在同一时区,因为设置传感器的人首先设置时间,因为它不太可能的传感器包含时区感知。

如果您可以自由决定传感器的设置时间,我通常建议使用UTC,因为这样可以避免夏令时等各种麻烦。此外,它在国际团队中运作良好。

如果您无法确定程序运行的PC的时区设置以及传感器是否匹配,那么即使datetime.fromtimestamp(1434549820776/1000, timezone)也是正确答案。