投放时间戳时会产生(Date + 1)

时间:2019-01-10 03:55:57

标签: sql date datetime google-cloud-platform google-cloud-spanner

在Google Spanner中,当我发现此问题时,我正在尝试投放一些时间戳。

执行以下脚本时:

SELECT EXTRACT(DATE FROM CAST("2019-01-01T07:56:34Z" AS TIMESTAMP))

我得到的输出为2018-12-31,而不是2019-01-01

我应该如何解析到确切的日期?

3 个答案:

答案 0 :(得分:4)

我建议显式指定时区,例如使用enter image description here函数。否则,America / Los_Angeles是默认时区,相对于您提供的时间戳时区,它会偏移-8小时。您提供的时间戳文字将Z(祖鲁时间)指定为时区偏移。

# Default timezone.
select DATE(TIMESTAMP "2019-01-01T07:56:34Z", "America/Los_Angeles");
+------------+
|            |
+------------+
| 2018-12-31 |
+------------+

# GMT aka Zulu time zone for both the timestamp and the date extraction.
select DATE(TIMESTAMP "2019-01-01T07:56:34Z", "+00:00");
+------------+
|            |
+------------+
| 2019-01-01 |
+------------+

答案 1 :(得分:1)

具有讽刺意味的是,当我运行它时,我得到了正确的日期。显然这是一个时区问题。

如果您想按原样从字符串中提取日期,请使用子字符串获取日期部分并转换为日期:

$activeSlide.dequeue();

答案 2 :(得分:-1)

您可以尝试如下使用吗:

select CAST('2019-01-01T07:56:34Z' AS date)