Pine Script™ (v6) の覚書 - コラム : チャートの1日はいつ始まるの?(TimeZoneについて) (5)
前回までの話
夏時間について
夏時間を持つtimezoneがあります。たとえば、"America/New_York"は、EST(GMT-5)と夏時間EDT(GMT-4)のことですが、timezoneに"America/New_York"を指定している限り、自動的に切り替わります。
夏時間の難しいところは、地域によって、切り替えのタイミングが異なることです。
夏時間の例:
America/New_York 3月2週目の日曜〜11月1週目の日曜日
Europe/London 3月の最終日曜日〜10月の最終日曜日
また、おそらく便宜上使われているであろう為替チャートのGMT+2(夏時間GMT+3)がどのタイミングで切り替わるのかはわかりません。きちんと調べていませんが、おそらくEST/EDTのタイミングなのではないかと想像しています。
夏時間か冬時間かを判定する
とりあえず、Europe/London(GMTとBST)、America/New_York(ESTとEDT)、America/Chicago(CSTとCDT)について、今の時間(timenow)が夏時間なのかどうかを調べて表示するスクリプトを書いてみました。
hour()でtimezone名("America/New_York")で取得したtimestampと、UTC/GMT表記("GMT-5"や"GMT-4")で取得したtimestampを比較して、夏時間なのか冬時間なのかを判定しています。
timezoneのGMTとの差が1時間単位の場合には何時かだけを見ればいいのでこの方法でできますが、30分単位の差の場合はこの方法では判定できません。たとえば、インドのtimezone ISTはGMT+5.5(夏時間はなし)です。
hour(time, timezone) → series int
t=table.new(position.top_right,100,100,color.new(color.blue,80),color.new(color.yellow,60),2,color.new(color.orange,60),2)
t.cell(10,10,"Europe/London",text_color=color.new(color.orange,40))
t.cell(11,10,"America/New_York",text_color=color.new(color.orange,40))
t.cell(12,10,"America/Chicago",text_color=color.new(color.orange,40))
LondonTime=switch hour(timenow,"Europe/London")
hour(timenow,"GMT")=>"GMT"
hour(timenow,"GMT+1")=>"BST(GMT+1)"
=>na
t.cell(10,20,LondonTime,text_color=color.new(color.blue,20))
New_YorkTime=switch hour(timenow,"America/New_York")
hour(timenow,"GMT-5")=>"EST(GMT-5)"
hour(timenow,"GMT-4")=>"EDT(GMT-4)"
=>na
t.cell(11,20,New_YorkTime,text_color=color.new(color.blue,20))
ChicagoTime=switch hour(timenow,"America/Chicago")
hour(timenow,"GMT-6")=>"CST(GMT-6)"
hour(timenow,"GMT-5")=>"CDT(GMT-5)"
=>na
t.cell(12,20,ChicagoTime,text_color=color.new(color.blue,20))pinescriptではGMTは使えましたが、BSTとEST/EDTとCST/CDTは使えないということが確認できました(のでGMT表記)。
このスクリプトでは、Europe/LondonとAmerica/New_YorkとAmerica/Chicagoのtimezoneが夏時間かどうかを右上に表示します。(図1)

実はstr.format_time()でも"z"で都市名で指定した場合の実際のtimezone(America/New_Yorkの場合EDTかEST)を取得することができます。(図2)
str.format_time(time, format, timezone) → series string
// イギリス
t.cell(10,21,str.format_time(timenow,"z","Europe/London"),text_color=color.new(color.blue,20))
// アメリカ(New_York)
t.cell(11,21,str.format_time(timenow,"z","America/New_York"),text_color=color.new(color.blue,20))
// アメリカ(Chicago)
t.cell(12,21,str.format_time(timenow,"z","America/Chicago"),text_color=color.new(color.blue,20))
ところが、EDTやCDTが取得できるのにこれをtimezoneの指定に用いることができません(図3)。ご注意ください。

ESTとCST(アメリカ)のSTはStandard Time
BST(イギリス)のSTはSummer Time
で逆になっています。面白いですね。
続く
いいなと思ったら応援しよう!
よろしければ応援お願いします! 