datetime.fromtimestamp vs datetime.utcfromtimestamp,哪个用起来更安全?

datetime.fromtimestamp vs datetime.utcfromtimestamp, which one is safer to use?

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

   "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'

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

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

如果您可以自由决定在传感器中设置什么时间,我通常会推荐使用 UTC,因为这样可以避免夏令时等方面的各种麻烦。它在国际团队中也很有效。

如果您不能确定运行程序的 PC 的时区设置与传感器匹配,甚至 datetime.fromtimestamp(1434549820776/1000, timezone) 可能也是正确的答案。

查看你的json,可以看到时间戳在本地对应的是2015-06-1707:03:40。

timezoneOffset 告诉你本地时间和UTC 时间有7 个小时的时差=> 你的json对应的UTC 时间是2015-06-1714:03:40。

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

两者都是正确的,只是它们给你的时间不同。两者都假设时间戳是从 EPOCH 开始的毫秒数(通常是 1/01/1970 00:00 UTC)并且:

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

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

必须知道你需要UTC时间还是本地时间。