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时间还是本地时间。
我正在从传感器收集一些数据,并从中获取时间戳,如下所示:
"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时间还是本地时间。