Go Academy · レッスン

タイムゾーン

場所を扱います

レッスン 4/413 ステップ

「タイムゾーン」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 時間と継続時間
  2. 書式設定と解析
  3. タイマーとTicker
  4. タイムゾーン
← Go Academyに戻る