【问题标题】:Working with UTC and current time zone使用 UTC 和当前时区
【发布时间】: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。

但是当我尝试取回价值时,我有两种情况:

  1. 如果我什么都不做,我会收到数据库中的 DateTime,“2016-07-13 14:00:00”
  2. 如果我尝试转换为本地时区,我会得到 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 timezonetimestamp 的不同之处在于它还保存了时区
  • 现在我明白你说的了。但是我仍然无法执行此 SQL 命令select timestamp_column at time zone 'your_zone' 我只能通过 API 处理来自数据库的数据。

标签: angularjs postgresql python-2.7 datetime momentjs


【解决方案1】:

解决方案:

对此我的解决方案是将所有内容都以 UTC 格式存储在我的数据库中。

检索 datetime 作为 UTC 并使用 momentjs 库转换为浏览器时区。

这样做。

moment.tz(moment.utc(datetime), moment.tz.guess());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多