【Kotlin/Android Studio】現在の日付を取得する方法!DateTimeFormatterの使い方

この記事からわかること
- Android Studio/Kotlinで現在の日付情報を取得する方法
- DateTimeFormatterの使い方
- yyyy/mm/dd形式の種類
- 日本時間を取得するには?
- Calendarクラスの使い方
index
[open]
\ アプリをリリースしました /
Android Studioに画像を取り込んで表示させる方法をまとめていきます。
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
現在の日付を取得する方法
Kotlinで現在の日付を取得するにはLocalDateTime
クラスのnow
プロパティを使用します。
import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
fun main() {
val now = LocalDateTime.now()
print(now)
} // 2023-07-24T10:29:30.624573060
9時間のズレが生じる原因
しかしprint
した時刻(19時でした)とオブジェクトの時刻では10時とPM 7時(19時)で日時情報には誤差が生まれています。これはUTC(協定世界時)で日時情報を保持しているためであり、UTCと日本標準時(JTC)とは9時間ズレているため誤差が生まれてしまうのです。
出力するフォーマットを指定
先ほどはデフォルトの形式のまま出力されていましたが、DateTimeFormatter
クラスを使用することで任意の形式に変更することができます。フォーマットパターンはofPattern
>の引数に文字列で渡します。
fun main() {
val now = LocalDateTime.now()
val df = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
val fdate = df.format(now)
print(fdate)
} // 2023/07/24 10:40:52
表示されている日付情報が/
区切りに変更になったことを確認できました。間の区切り文字に指定はないので日本語の年月日を指定することも可能です。
fun main() {
val now = LocalDateTime.now()
val df = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分ss秒")
val fdate = df.format(now)
print(fdate)
} // 2023年07月24日 11時04分39秒
フォーマットパターンの種類
"yyyy/MM/dd
などのフォーマットはあらかじめ指定されたシンボルを使用します。以下に公式サイトに載っていたものを抜粋したので参考にしてください。
Symbol | 意味 | Examples |
---|---|---|
G | 元号 | 西暦; Anno Domini; A |
u | 年 | 2004; 04 |
y | 元号の年 | 2004; 04 |
D | 年内通算日 | 189 |
M/L | 年内月 | 7; 07; 7月; 7月; J |
d | 月内通算日 | 10 |
g | 修正ユリウス日 | 2451334 |
Q/q | 四半期 | 3; 03; 第3四半期; 3rd quarter |
Y | 週ベースの年 | 1996; 96 |
w | 週ベースの年内週 | 27 |
W | 月内週 | 4 |
E | 曜日 | 火; 火曜日; 火 |
e/c | ローカライズされた曜日 | 2; 02; 火; 火曜日; 火 |
F | 月内曜日番号 | 3 |
a | 午前/午後 | 午後 |
h | 午前/午後の時 (1-12) | 12 |
K | 午前/午後の時 (0-11) | 0 |
k | 1日の時 (1-24) | 24 |
H | 1日の時 (0-23) | 0 |
m | 分 | 30 |
s | 秒 | 55 |
S | 秒以下の小数部分 | 978 |
A | 1日のミリ秒 | 1234 |
n | 秒以下のナノ秒 | 987654321 |
N | 1日のナノ秒 | 1234000000 |
参考文献:公式:DateTimeFormatter
日本時間で取得する
先ほどまではUTC時間で取得していましたが、日本時間で取得した方が使う頻度は多いと思うのでそちらも紹介します。以下のようにZonedDateTime
クラスを使用します。
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
fun main() {
val now = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"))
val df = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分ss秒")
val fdate = df.format(now)
print(fdate)
} // 2023年07月24日 20時07分32秒
Calendarクラスから日時を1つずつ取得する
Calendar
クラスを使用することで日時情報を1つ1つ取得することが可能です。ですが月のみ1ヶ月少ない数値が返ってくるので+1
することで実際の月に合わせます。これは1月=0
、2月=1
という感じになっているからのようです。
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
val second = c.get(Calendar.SECOND)
print(year) // 2023
print(month + 1 ) // 8
print(day) // 3
print(hour) // 12
print(minute) // 32
print(second) // 17
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
個人開発に限界を感じたらiOSに特化したプログラミングスクール「iOSアカデミア」も検討してみてください!無料相談可能で「最短・最速」でiOSエンジニアになれるように手助けしてくれます。