👌

[Android/Kotlin]時刻を扱う時の知識をまとめてみた

2024/07/14に公開

時刻に関連する言葉を理解しよう

-UTC(協定世界時)
-GMTGMT(グリニッジ標準時)
-UNIX時間
-タイムゾーン
-サマータイム

UTC(協定世界時)

世界で標準時として使っている時間。日本時間から9時間引いた時刻です。
UTCがあるのは、世界中の人とコミュニケーションをとるのに、 共通の時間が必要だから。

例えば、友達とオンラインゲームをする時、 住んでる場所が違うと時間も違いますよね?日本で夜8時にゲームを始めようとしても、 アメリカに住んでる友達はまだ朝だったりする。 そんな時、UTCっていう共通の時間があれば、 「 UTCの午後3時に始めよう! 」 って約束できます。そうすれば、世界中どこに住んでいても、同じ時間にゲームを始められますよね?UTCは、飛行機の出発時間や、世界中のニュースを伝える時にも使われています。世界中の人とスムーズにコミュニケーションをとるために、 UTCはとても大切な役割を果たしています。

UTCが2030年12月1日 00:00であれば日本時間は2030年12月1日 09:00になります。
一例としてjava.time.Instantを使用してUTC時刻を取得できます。

val utcTime = Instant.now()
Log.d("tag", "utcTime=$utcTime")

ログは
2024-07-12T23:29:20.435041Zと出力され、ISO 8601形式となります。ISO 8601形式は以下の特徴があります。

  • 日付と時刻を「T」で区切る
  • 最後に「Z」がついた場合、その時間はUTC時刻
  • UTCではなく日本標準時の場合は2024-07-13T08:36:54.490018+09:00のように、最後に「+09:00」と付き、UTCとどれぐらい時間差があるか情報が付く

GMT(グリニッジ標準時)

UTCの前に世界で標準時として使っていた時間です。UTCとGMTはほぼ同じような時間ですが、セシウム原子の振動数をもとに導き出すUTCの方が正確な時間のため今はUTCが使われています。

UNIX時間

UTCで「1970年1月1日午前0時0分0秒」 を基準にして、そこからの経過秒数で日時を表現するやり方です。

Unix時間があるのは、コンピューターが時間を管理するのに便利な方法だから。 コンピューターは人間みたいに「今日は何月何日」 とか「今は何時何分」 って考えない。代わりに、数字を使って時間を数えています。でも、数字だけだと「いつから数え始めたの?」 って分からなくなっちゃいますよね?そこで、世界中のコンピューターが共通で「1970年1月1日午前0時0分0秒」 を「0秒」 として、 そこから何秒経ったかを数えることにしました。 これがUnix時間です。

Log.d("tag", "unixTime=${System.currentTimeMillis()}")

ログは1720829799018のように出力されます。単位はミリ秒でUTC時刻が基準となっているので、この数字を日時に変換するとUTC時刻になります。

タイムゾーン

地球は丸くて太陽の光が当たる場所は昼間、 当たらない場所は夜になりますよね? もし世界中が同じ時間だったら、太陽が出ている場所も、真っ暗な場所も、全部同じ時刻になっちゃいますよね?
だから、地球をいくつかのエリアに分けて、 それぞれのエリアで時間をずらす。 これがタイムゾーン。
日本は「日本標準時」っていうタイムゾーンで、 イギリスのロンドンは「 グリニッジ標準時」 っていうタイムゾーン。 日本とロンドンでは、時差が9時間あります。つまり、 日本で朝ごはんを食べてる時に、 ロンドンではまだ夜中。 これで、それぞれの場所で、太陽の位置と時間がだいたい合うようになります。

UTCではなくタイムゾーンを考慮した時刻を取得する場合は以下のように取得することができます。

val localDateTime = LocalDateTime.now()
val africa = ZonedDateTime.of(localDateTime, ZoneId.of("Africa/Ndjamena"))
val america = ZonedDateTime.of(localDateTime, ZoneId.of("America/Los_Angeles"))
Log.d("tag", "africa=$africa")
Log.d("tag", "america=$america")

ログは以下のように出力されます。

  • 2024-07-13T10:08:37.007282+01:00[Africa/Ndjamena]
  • 2024-07-13T10:08:37.007282-07:00[America/Los_Angeles]

サマータイム

サマータイムは夏の間だけ時計の針を1時間進めることです。 サマータイムに入ると、例えばアメリカだと午前2時になった瞬間にいきなり午前3時に針が進みます。となると朝7時に出勤する人がいれば、1時間針が早く進んでいるので朝6時に出勤するような状態になります。いつもより朝早く出勤するんです。

なんでそんなことをするのでしょうか?

夏は日が長くなるから、明るい時間を有効活用するためです。
時計の針を1時間進めることで、

  • 朝早くから活動できるようになる
  • 電気を使う時間が減って、省エネになる
  • 仕事が終わった後も明るいから、遊びに行ったり、 スポーツを楽しんだりする時間が増える

といったメリットがあります。サマータイムは、国によって導入しているところとしていないところがあります。夏を有意義に過ごすための工夫ですね。

Discussion