【问题标题】:How Google cloud platform manages timezones?谷歌云平台如何管理时区?
【发布时间】:2021-10-11 22:28:27
【问题描述】:

我有一个数据库,我不知道时间存储在哪个时区。但我需要知道这一点,因为我需要在某些给定时区生成报告。

select INVOICE_DATE, timestamp(INVOICE_DATE), timestamp(INVOICE_DATE, "UTC+1"),  CURRENT_TIMESTAMP(), TIMESTAMP(DATETIME (INVOICE_DATE), "UTC-2")
FROM `SALES` s
limit 1000;

无论我有什么发票日期,比如今天 13:00,当我使用 UTC+1 时,它都会变成 12:00;减去而不是增加小时。我预计它会更改为 14:00。

所以我有两个主要问题。

我如何知道我的时间存储在哪个时区? 如何更改给定记录的时区以匹配所需的时区,例如 GTM-4?

【问题讨论】:

  • 您使用的是什么数据库产品?它在哪里托管?对于您的时间/日期数据...托管该数据的表的架构类型是什么?
  • 我们在 GCP 上使用 BigQuery。我们使用日期时间数据类型,架构为 2021-10-04T19:16:43 %Y-%m-%dT%T o YYYY-MM-DD'T'HH: MM: SS

标签: google-cloud-platform timezone


【解决方案1】:

Datetime 数据类型存储日期和时间。例如:

2021 年 10 月 10 日晚上 10:26

这既不是本地时间也不是 UTC 时间……它只是一个时间说明符。如果您不知道数据保存在哪个时区,则无法将其指定为绝对时间的特定点。与绝对时间比较时,假定日期时间为 UTC。

所以...如果我的值包含“2021-10-10T22:26:00”并且现在是 UTC 2021-10-10T22:26:00,那么如果我减去 now-value,答案是 0。

并且...如果我的值包含“2021-10-10T22:26:00”并且现在是 UTC+1 2021-10-10T22:26:00,那么如果我减去 now-value,答案是 1 小时.

在您的示例中,如果您的当前值为 13:00,并且您创建了一个时间戳值为“2021-10-10T13:00:00”并说这将被解释为 UTC+1 ...你是说你比 UTC 早 1 小时,时间 (UTC) 确实是 12:00。

为了向自己证明...访问:

https://time.is/UTC+1

https://time.is/UTC

对于第一个链接,查看显示的时间并说“如果我在 UTC+1 时区,这就是我在挂钟上看到的时间”。然后访问第二个链接并说“这将是 UTC 的同一时间”。您会看到 UTC+1 提前一小时。

【讨论】:

  • 让我看看我是否明白。如果我有这个 TIMESTAMP(INVOICE_DATE, "UTC-2"),我要求引擎给我 UTC 发票日期,假设它是 UTC-2 并且不要求将发票时间从 UTC 转换为 UTC-2。对吗?
  • 对...如果您使用“TIMESTAMP(SOME_DATA, SOME_TZ)”,您的意思是“这是一个时间......但由于时间不是绝对的......意味着中午在德克萨斯是伦敦的下午 5:00,说下午 5:00 本身是一个相对的概念。如果你说 12:00 UTC-5(德克萨斯的时区),那就等于说“12:00 UTC”或“ 12:00" 因为默认是 UTC。
猜你喜欢
  • 2020-02-08
  • 2021-05-14
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2016-12-26
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多