我有两栏。一个是UTC时间戳。第二列是格式为字符串的UTC偏移量。因此,加州为-08:00,巴黎为01:00。
如何合并两列以获得本地时间? 当我尝试将字符串转换为时间戳时,由于否定,我得到了无效的时间戳。
答案 0 :(得分:1)
您可以使用timestamp()
将时间戳的字符串表示形式转换为时间戳。
因此,这应该可行:
select timestamp('2020-01-01 00:00:00-08:00') as ca_time,
timestamp('2020-01-01 00:00:00+01:00') as paris_time
如果您想在当地时间 ,则可以转换为datetime
:
select datetime(timestamp('2020-01-01 00:00:00-08:00'), 'America/New_York') as ca_time,
datetime(timestamp('2020-01-01 00:00:00+01:00'), 'America/New_York') as paris_time
也就是说,我鼓励您将字符串转换为timestamp
的并将其保留在此处。只需将其转换为本地时间以用于输出目的并确定本地日期。学会与UTC一起工作有一定的学习曲线,但是可以避免很多问题。
答案 1 :(得分:0)
以下BigQuery示例
#standardSQL
WITH `project.dataset.yourtable` AS (
SELECT '-08:00' timezone_offset, TIMESTAMP '2020-03-01 03:41:27 UTC' UTC_timestamp UNION ALL
SELECT '01:00', '2020-03-01 03:41:27 UTC'
)
SELECT * EXCEPT(hour, minute),
DATETIME(TIMESTAMP_ADD(TIMESTAMP_ADD(UTC_timestamp, INTERVAL CAST(hour AS INT64) HOUR), INTERVAL CAST(minute AS INT64) MINUTE)) AS local_time
FROM `project.dataset.yourtable`,
UNNEST([STRUCT(SPLIT(timezone_offset, ':')[OFFSET(0)] AS hour, SPLIT(timezone_offset, ':')[OFFSET(1)] AS minute)])
有输出
Row timezone_offset UTC_timestamp local_time
1 -08:00 2020-03-01 03:41:27 UTC 2020-02-29T19:41:27
2 01:00 2020-03-01 03:41:27 UTC 2020-03-01T04:41:27
答案 2 :(得分:0)
我经常做的事,我使用条件将时间戳UTC转换为本地日期时间。我在这里检查tz名称列表。 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones。只要您拥有utc_offset或地区或国家/地区名称,就可以将UTC更改/转换为本地时间戳记/日期时间。
查询下方:
#standardSQL
WITH
sample_data_utc AS (
SELECT
TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), SECOND) AS utc_timestamp,
'01:00' AS utc_offset
UNION ALL
SELECT
TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), SECOND) AS utc_timestamp,
'-08:00' AS utc_offset)
SELECT
STEP_ONE.utc_timestamp,
CASE STEP_ONE.utc_offset
WHEN '01:00' THEN DATETIME(STEP_ONE.utc_timestamp, "Europe/Paris")
WHEN '-08:00' THEN DATETIME(STEP_ONE.utc_timestamp, "America/Tijuana")
--find out the TZ name in here https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ELSE
NULL
END
AS local_timestamp
FROM
sample_data_utc AS STEP_ONE
输出:
Row utc_timestamp local_timestamp
1 2020-03-01 03:41:27 UTC 2020-02-29T19:41:27
2 2020-03-01 03:41:27 UTC 2020-03-01T04:41:27