23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Bigqueryの時刻のタイムゾーンに関する細かいこと

Last updated at Posted at 2019-03-08

#タイムゾーンを色々変えて、クエリを走らせてみた
Bigqueryで時刻データを扱うとき、色々変換をしたら、結局どこのタイムゾーンで、何の時間なのかわからなくなってしまうことがあったので、まとめてみました。

select
--BQではディフォルトでUTC時間として認識される
timestamp('2019-03-06 08:01:17') as result_1,  

--特に書くことなし、もともとタイムゾーンがUTC時間なのでそのままである
timestamp('2019-03-06 08:01:17 UTC') as result_2,  

--タイムゾーンは日本時間なので、何も書かなければUTC時間に直される
timestamp('2019-03-06T08:01:17+09:00') as result_3,  

--下記のように書くと、これは日本時間ですよという命令になるので、-9時間してUTC時間表示に修正される
timestamp('2019-03-06 08:01:17', 'Asia/Tokyo') as result_4,  

--タイムゾーンはUTC時間で、日本時間に修正してくださいの命令は動きませんでした
--timestamp('2019-03-06 08:01:17 UTC','Asia/Tokyo') as result_5,  

--タイムゾーンは日本時間で、再度日本時間に修正してくださいの命令は動きませんでした
--timestamp('2019-03-06T08:01:17+09:00','Asia/Tokyo') as result_6,  

--日本時間タイムゾーンがついている時間を'%Y-%m-%d %H:%M:%S'形式の日本時間で表示
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S',timestamp('2019-03-06 08:01:17', 'Asia/Tokyo'),'Asia/Tokyo') as result_7,  

--UTC時間と認識されている時間を'%Y-%m-%d %H:%M:%S'形式の日本時間で表示 
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S',timestamp('2019-03-06 08:01:17'),'Asia/Tokyo') as result_8,  

--UTC時間の時間を'%Y-%m-%d %H:%M:%S'形式の日本時間で表示 
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S',timestamp('2019-03-06 08:01:17 UTC'),'Asia/Tokyo') as result_9,  

--UTC時間と認識されているデータを'%Y-%m-%d %H:%M:%S'形式の日本時間で表示する。しかし、タイムゾーン情報がなくなりタイムスタンプ型に直すとUTC時間と認識されてしまう。
timestamp_add(timestamp(FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S',timestamp('2019-03-06 08:01:17'),'Asia/Tokyo')), interval 1 hour) as result_10

#実行結果

result_1 2019-03-06 08:01:17 UTC
result_2 2019-03-06 08:01:17 UTC
result_3 2019-03-05 23:01:17 UTC
result_4 2019-03-05 23:01:17 UTC
result_7 2019-03-06 08:01:17
result_8 2019-03-06 17:01:17
result_9 2019-03-06 17:01:17
result_10 2019-03-06 18:01:17 UTC
#まとめ
#####1
Bigqueryではタイムゾーン情報が付いていなれば、ディフォルトでタイムゾーンはUTCと認識される。

#####2
Bigqueryでタイムゾーン情報が付いていない場合、クエリでタイムゾーンをつけた後編集した方が間違わずに済む
このように書く↓
timestamp('2019-03-06 08:01:17', 'Asia/Tokyo')

#####3
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S',…
のように書くとタイムゾーン情報がなくなるので、
変換しているうちに時間がずれることがある。
なるべくFORMAT_TIMESTAMPは使わない方が間違いが少ない

23
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?