3

"01:20" -> 1:20AM と "21:20" -> 9:20PM のような文字列から時間 (時、分、AM/PM) を解析する方法を知っている人はいますか? そこにあるほとんどのソリューションは、Date または Calendar オブジェクトを想定または必要とするようです。

私の入力時間は、実際には TimePickerDialog (具体的には、この MaterialDateTimePicker の実装) から来ているため、hourOfDay、分、および秒 (整数) のみを受け取ります。

ユーザーが選択した時刻をわかりやすい方法でフォーマットできるようにしたい、つまり 12:30PM、02:15AM など。

Joda Time を使用しようとしています:

fun formattedTime(timeStr: String): String {
    // Get time from date
    val timeFormatter = DateTimeFormat.forPattern("h:mm a")
    val displayTime = timeFormatter.parseLocalTime(timeStr)
    return displayTime.toString()
}

しかし、「1:20」などの入力文字列でこのエラーが発生します。 java.lang.IllegalArgumentException: Invalid format: "1:20" is too short

SimpleDateFormatも調べましたが、この関連する質問のように完全な日時文字列が必要なようです

4

3 に答える 3

2

受け入れられた答えは正しいです。SimpleDateFormatただし、 OPが明示的に最初にJodaの回答を望んでいたにもかかわらず、古いクラスを見て驚いています(質問のタグを参照)。だから私は補足としてJodaの答えをここに投稿します:

DateTimeFormatter target = DateTimeFormat.forPattern("h:mm a").withLocale(Locale.ENGLISH);
DateTimeFormatter source = DateTimeFormat.forPattern("HH:mm");
System.out.println("01:30 -> " + target.print(source.parseLocalTime("01:30")));
System.out.println("21:20 -> " + target.print(source.parseLocalTime("21:20")));

01:30 -> 午前 1:30
21:20 -> 午後 9:20

2 つの異なる時間ライブラリを混在させないことをお勧めします (OP は明らかに Joda-Time-Android を使用しています)。

于 2018-04-18T14:18:55.607 に答える