タイムゾーン
場所を扱います
「タイムゾーン」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
時刻がロケーションを持つ
すべてのtime.Timeには関連付けられたロケーション(タイムゾーン)があります。同じ時点でも、タイムゾーンによって表示は異なります。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.Location())
}UTCとLocal
次の2つの組み込みロケーションは、常に利用できます。
- 協定世界時には
time.UTCを使用します。 - マシンのローカルタイムゾーンには
time.Localを使用します。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.UTC().Hour())
}名前付きタイムゾーンの読み込み
time.LoadLocation(name)は、"Europe/Istanbul"や"America/New_York"のようなIANAタイムゾーンを検索します。
package main
import (
"fmt"
"time"
)
func main() {
loc, err := time.LoadLocation("UTC")
fmt.Println(loc, err)
}Inによるタイムゾーンの変換
t.In(loc)は、同じ時点を別のタイムゾーンで表示した値を返します。基になる時点は変わらず、表示だけが変わります。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(time.UTC).Hour())
}同じ時点、異なる時刻表示
UTCの正午は1つの時点ですが、別のタイムゾーンにいる人には異なる壁時計の時刻として表示されます。両者のSubによる差は0です。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
u := t.UTC()
fmt.Println(t.Sub(u))
}タイムゾーンを指定した時刻の作成
time.Dateの最後の引数にロケーションを渡すと、そのタイムゾーンの時刻を直接作成できます。
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("UTC")
t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
fmt.Println(t.Hour())
}タイムゾーンのオフセットを読み取る
t.Zone()は、タイムゾーンの略称と、UTCからのオフセットを秒単位で返します。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
name, offset := t.Zone()
fmt.Println(name, offset)
}固定タイムゾーン
IANAの完全なルールが必要ない場合は、time.FixedZone(name, offsetSeconds)で一定のオフセットを持つシンプルなタイムゾーンを作成できます。
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
name, off := t.Zone()
fmt.Println(name, off)
}タイムゾーンをまたいだフォーマット
フォーマットする前にInで変換すると、読み手のタイムゾーンでタイムスタンプを表示できます。
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(loc).Format("15:04 MST"))
}UTCで保存し、ローカルで表示する
広く使われている原則は、UTCで保存・計算し、ユーザーに時刻を表示するときだけローカルタイムゾーンに変換することです。これにより曖昧さを避けられます。
package main
import (
"fmt"
"time"
)
func main() {
stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT+2", 2*3600)
fmt.Println("shown:", stored.In(loc).Hour())
}読み込みエラーへの対処
タイムゾーンデータベースが存在しない場合や名前が不明な場合、LoadLocationは失敗することがあります。必ずエラーを確認してください。
package main
import (
"fmt"
"time"
)
func main() {
_, err := time.LoadLocation("Mars/Olympus")
if err != nil {
fmt.Println("unknown zone")
}
}クイックチェック
t.In(loc)は何を変更しますか?
まとめ:タイムゾーン
ロケーションを扱う方法を学びました。
- すべての時刻はロケーションを持ち、
UTCとLocalは組み込みで利用できます。 LoadLocationで名前付きタイムゾーンを読み込むか、FixedZoneでオフセットを作成します。Inで変換し、UTCで保存してローカルで表示します。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT-5", -5*3600)
fmt.Println(t.In(loc).Format("15:04 MST"))
}AI チューターと学ぶ Go — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「タイムゾーン」レッスンは無料ですか?
はい。「タイムゾーン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「タイムゾーン」で何を学びますか?
場所を扱います ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「タイムゾーン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。