我有一个表单,该表单将日期对象从javascript发送到python backend。该日期输入GMT +0530
,但在Python中,它被解析为GMT +0000
。
以下是JavaScript日志:
> $scope.my_date.getTime()
< 1480617000000
> $scope.my_date
< Fri Dec 02 2016 00:00:00 GMT+0530 (IST)
所以,上述日期被解析为Thur Dec 01 2016 18:30:00 GMT+0000
。
如何发送填充表格的国家/地区的时区,以便我可以使用该时区将时间从Dec 01
转换为Dec 02
?
我可以通过以下方法以小时(python)发送偏移:
> $scope.my_date.getTimezoneOffset()/60
< -5.5
但是,python的pytz以"Asia/Kolkata"
格式理解时区,而不是-5.5
格式。
我可以手动调整-5.5
的日期,但是我正在寻找一个干净的解决方案。
我使用以下方法解决上述问题。
我在将其发送到服务器之前更改了JS本身的时间。
($scope.my_date.getTime()/1000) - ($scope.my_date.getTimezoneOffset()*60)
用 Math.floor($scope.my_date.getTime()/1000)
提交,在python方面只需阅读unix时间戳。
解释:getTime()
返回带有毫秒的UNIX时间戳记,或以下是miliseconds的数量:
1970年1月1日00:00:00 UTC
我已经大胆了最后一点,因为它很重要。创建UNIX时间戳记时,您的时区域都无关紧要,它始终是UTC。适当处理UNIX时间戳的每个编程语言和工具都将以UTC的时间戳记阅读,并内部转换为本地/正确的时区。
因此,不要试图解析日期字符串的事情变得复杂 - 只需使用时间戳 - 它是通用的。
唯一的陷阱是删除毫秒的转换(带有Math.floor
的/1000
)。