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

この記事からわかること

  • Android Studio/Kotlin現在日付情報取得する方法
  • DateTimeFormatter使い方
  • yyyy/mm/dd形式種類
  • 日本時間を取得するには?
  • Calendarクラスの使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Android Studioに画像を取り込んで表示させる方法をまとめていきます。

環境

現在の日付を取得する方法

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

先ほどはデフォルトの形式のまま出力されていましたが、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月=02月=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

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index