アフィリエイト広告を利用しています

広告

posted by fanblog

広告

posted by fanblog
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です

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 12:41 | この記事のURL
この記事のURL

×

この広告は30日以上新しい記事の更新がないブログに表示されております。