2013年08月16日
第24回 サマータイム
MT4から分足や時間足のデータを取得する際にはタイムゾーンが違うので東京時間に変換しなくてはなりません。その際にサマータイムを考慮する必要があります。
今回はサマータイムルーチンについて書いてみます。
(1) 東京時間に変換
(1-1) 東ヨーロッパ
MT4ではこのタイムゾーンのデータプロバイダが多い。
東京時間=東ヨーロッパ時間+6時間 (ロンドンがサマータイムのとき)
東京時間=東ヨーロッパ時間+7時間
(1-2) ニューヨーク
東京時間=ニューヨーク時間+13時間 (ニューヨークがサマータイムのとき)
東京時間=ニューヨーク時間+14時間
(1-3) ロンドン
東京時間=ロンドン時間+8時間 (ロンドンがサマータイムのとき)
東京時間=ロンドン時間+9時間
(2) ロンドンのサマータイム判定
3月最終日曜日午前1時から10月最終日曜日午前2時までがロンドンのサマータイムです。
ロンドンでは3月最終日曜日午前1時になったら時計を1時間進め、10月最終日曜日午前2時になったら時計を1時間戻すということになります。
Function   Isロンドン夏時間(ロンドン日時)
Select Case Month(ロンドン日時)
  Case 1, 2, 11, 12: Exit Function
  Case 4, 5, 6, 7, 8, 9: Isロンドン夏時間 = True: Exit Function
End Select
月初日 = DateSerial(Year(ロンドン日時), Month(ロンドン日時), 1)
If Month(ロンドン日時) = 3 Then
    Select Case Weekday(月初日)
      Case 1: 開始日 = 29    '日曜
      Case 2: 開始日 = 28    '月曜
      Case 3: 開始日 = 27    '火曜
      Case 4: 開始日 = 26    '水曜
      Case 5: 開始日 = 25    '木曜
      Case 6: 開始日 = 31    '金曜
      Case 7: 開始日 = 30    '土曜
    End Select
   If Day(ロンドン日時) > 開始日 Then Isロンドン夏時間 = True
   If Day(ロンドン日時) = 開始日 Then
      If Hour(ロンドン日時) >= 1 then Isロンドン夏時間 = True
   End If
End If
If Month(ロンドン日時) = 10 Then
    Select Case Weekday(月初日)
      Case 1: 終了日 = 29    '日曜
      Case 2: 終了日 = 28    '月曜
      Case 3: 終了日 = 27    '火曜
      Case 4: 終了日 = 26    '水曜
      Case 5: 終了日 = 25    '木曜
      Case 6: 終了日 = 31    '金曜
      Case 7: 終了日 = 30    '土曜
    End Select
    If Day(ロンドン日時) < 終了日 Then Isロンドン夏時間 = True
    If Day(ロンドン日時) = 終了日 Then
      If Hour(ロンドン日時) < 2 then Isロンドン夏時間 = True
    End If
End If
End Function
入力引数はロンドン日時(yyyy/mm/dd hh:mm)です
出力はロンドンがサマータイムならばTrue、そうでないならばFalseです
(3) ニューヨークのサマータイム判定
3月第2日曜日午前2時から11月第1日曜日午前2時までがニューヨークのサマータイムです。
ニューヨークでは3月第2日曜日午前2時になった1時間時計を進め、11月第1日曜日午前2時になったら1時間時計を戻すということになります。
Function   Isニューヨーク夏時間(ニューヨーク日時)
Select Case Month(ニューヨーク日時)
  Case 1, 2, 12: Exit Function
  Case 4, 5, 6, 7, 8, 9, 10: Isニューヨーク夏時間 = True: Exit Function
End Select
月初日 = DateSerial(Year(ニューヨーク日時), Month(ニューヨーク日時), 1)
If Month(ニューヨーク日時) = 3 Then
    Select Case Weekday(月初日)
      Case 1: 開始日 = 8      '日曜
      Case 2: 開始日 = 14    '月曜
      Case 3: 開始日 = 13    '火曜
      Case 4: 開始日 = 12    '水曜
      Case 5: 開始日 = 11    '木曜
      Case 6: 開始日 = 10    '金曜
      Case 7: 開始日 = 9      '土曜
    End Select
   If Day(ニューヨーク日時) > 開始日 Then Isニューヨーク夏時間 = True
   If Day(ニューヨーク日時) = 開始日 Then
       If Hour(ニューヨーク日時) >= 2 Then Isニューヨーク夏時間 = True
   End If
End If
If Month(ニューヨーク日時) = 11 Then
    Select Case Weekday(月初日)
      Case 1: 終了日 = 1    '日曜
      Case 2: 終了日 = 7    '月曜
      Case 3: 終了日 = 6    '火曜
      Case 4: 終了日 = 5    '水曜
      Case 5: 終了日 = 4    '木曜
      Case 6: 終了日 = 3    '金曜
      Case 7: 終了日 = 2    '土曜
    End Select
    If Day(ニューヨーク日時) < 終了日 Then Isニューヨーク夏時間 = True
    If Day(ニューヨーク日時) = 終了日 Then
       If Hour(ニューヨーク日時) < 2 Then Isニューヨーク夏時間 = True
    End If
End If
End Function
入力引数はニューヨーク日時(yyyy/mm/dd hh:mm)です
出力はニューヨークがサマータイムならばTrue、そうでないならばFalseです
エクセルファイルです。
    ダウンロード
前へ   次へ
【このカテゴリーの最新記事】