2
2

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.

Go 言語でサマータイムを扱う

Last updated at Posted at 2018-10-26

はじめに

  • サマータイムは標準時とは別のタイムゾーンとして定義されており、時差はいくつか?開始終了日はいつか?という情報は tz database にまとめられている。
  • Go では time.Location 経由でこの tz database を利用しており、time.Location を time.Time に与えることでタイムゾーンを取り扱うことができる。

コード

package main

import (
	"fmt"
	"time"
)

func main() {
	// 地域名から Location を取得
	loc, _ := time.LoadLocation("America/New_York")
	// Location を指定して日時を表示
	fmt.Println(time.Now().In(loc)) //=> 2009-11-10 18:00:00 -0500 EST

	// サマータイムと標準時の切り替わりの挙動を確認する
	// サマータイムを採用している地域の Location では日時によってタイムゾーンが切り替わる
	fmt.Println("サマータイム開始")
	fmt.Println(time.Date(2018, 3, 11, 6, 59, 59, 0, time.UTC).In(loc)) //=> 2018-03-11 01:59:59 -0500 EST
	fmt.Println(time.Date(2018, 3, 11, 7, 0, 0, 0, time.UTC).In(loc))   //=> 2018-03-11 03:00:00 -0400 EDT
	fmt.Println("サマータイム終了")
	fmt.Println(time.Date(2018, 11, 4, 5, 59, 59, 0, time.UTC).In(loc)) //=> 2018-11-04 01:59:59 -0400 EDT
	fmt.Println(time.Date(2018, 11, 4, 6, 0, 0, 0, time.UTC).In(loc))   //=> 2018-11-04 01:00:00 -0500 EST

	// サマータイムを採用している地域の時刻をパースする
	// タイムゾーン名やオフセットがない場合は該当地域の指定時刻のタイムゾーンが適用される
	t, _ := time.ParseInLocation("2006-01-02 15:04:05", "2018-03-11 01:00:00", loc)
	fmt.Println(t) //=> 2018-03-11 01:00:00 -0500 EST
	t, _ = time.ParseInLocation("2006-01-02 15:04:05", "2018-03-11 03:00:00", loc)
	fmt.Println(t) //=> 2018-03-11 03:00:00 -0400 EDT
	// タイムゾーン名を指定すればそのタイムゾーンになる
	// 例はサマータイムから標準時に切り替わる際にタイムゾーン違いで二度あらわれる 1 時をパースする
	t, _ = time.ParseInLocation("2006-01-02 15:04:05 -0700", "2018-11-04 01:00:00 -0400", loc)
	fmt.Println(t) //=> 2018-11-04 01:00:00 -0400 EDT
	t, _ = time.ParseInLocation("2006-01-02 15:04:05 -0700", "2018-11-04 01:00:00 -0500", loc)
	fmt.Println(t) //=> 2018-11-04 01:00:00 -0500 EST
}
2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?