【发布时间】:2016-07-13 12:24:27
【问题描述】:
我正在从事一个仅在一个国家/地区使用但现在在多个国家/地区使用的项目。
所以我正在处理一些 DateTime 问题,正如您所想象的那样。
我在这个项目中使用 angular js 作为前端,python 作为后端,Postgres 作为我的数据库。
为了避免 DateTime 出现任何问题并尝试更轻松地使用时区,我将 DateTime 在数据库中保存为 UTC。
from DateTime import DateTime
# inside a class of my entity
self.start_date = datetime.utcnow()
这工作正常,问题是当我尝试将日期转换回来时。
例如。
如果我的应用程序在 GMT -1 的国家/地区运行,当用户 要求保存实体,它是 2016-07-13 15:00:00,在数据库中 (使用 UTC now())DateTime 将变为 2016-07-13 16:00:00。
但是当我尝试取回价值时,我有两种情况:
- 如果我什么都不做,我会收到数据库中的 DateTime,“2016-07-13 14:00:00”
- 如果我尝试转换为本地时区,我会得到 2016-07-13 17:00:00。时间增加了 1,而不是我预期的减少。
我正在尝试使用 momentjs 库来处理日期,但似乎没有任何效果。
我想知道我应该做的是获取 GMT,例如 (-01:00),然后对来自数据库的 DateTime 进行一些数学运算,例如 sub 或 sum GMT 小时差。
【问题讨论】:
-
通常你在数据库中使用
timestamp with timezone,然后用now()赋值,然后你select timestamp_column at time zone 'your_zone' -
是的,我正在使用
**timestamp** in the database。我使用utcnow()来避免任何数据库错误的时区问题。我现在需要的是在从数据库接收到这个值后转换它。在我的情况下,select timestamp_column at time zone 'your_zone'不是一个选项。 -
timestamp with timezone与timestamp的不同之处在于它还保存了时区 -
现在我明白你说的了。但是我仍然无法执行此 SQL 命令
select timestamp_column at time zone 'your_zone'我只能通过 API 处理来自数据库的数据。
标签: angularjs postgresql python-2.7 datetime momentjs