При приведении отметки времени к дате выдается (Дата + 1) - PullRequest
0 голосов
/ 10 января 2019

В Google Spanner я пытаюсь установить некоторые временные метки на сегодняшний день, когда обнаружил эту проблему.

При выполнении скрипта ниже:

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

Я получаю вывод 2018-12-31, а не 2019-01-01.

Как мне разобрать точную дату?

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Я рекомендую явно указать часовой пояс, например, с помощью функции DATE . В противном случае 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 |
+------------+
0 голосов
/ 10 января 2019

Как ни странно, когда я запускаю его, я получаю правильную дату. Это явно проблема часового пояса.

Если вы хотите извлечь дату из строки как есть, то используйте подстроку, чтобы получить компонент даты и преобразовать в дату:

CAST(SUBSTR('2019-01-01T07:56:34Z', 1, 10) as DATE)
0 голосов
/ 10 января 2019

Можете ли вы попробовать использовать, как показано ниже:

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