java.time
2010 年にjava.util.Date
は が ( および と一緒DateFormat
にCalendar
) 私たち全員が使用したクラスでしたが、これらのクラスは常に設計が不十分であり、現在では時代遅れになっています。今日では、Java の最新の日付と時刻の API である java.time を使用します。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy,HH:mm:ss");
String dateTimeStringFromSqlite = "29-Apr-2010,13:00:14";
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStringFromSqlite, formatter);
System.out.println("output here: " + dateTime);
出力は次のとおりです。
ここに出力: 2010-04-29T13:00:14
コードで何が問題になったのですか?
大文字HH
とaaa
あなたのフォーマットのパターン文字列の組み合わせはあまり意味がありませんHH
.AM/PM マーカーをaaa
余分なものからレンダリングするためです. ただし、害はありません。報告された正確な結果を再現することはできませんでした. いずれにせよ、あなたのコメントは、昔ながらのものを使用するSimpleDateFormat
か現代的なものを使用するかに関係なく、要点DateTimeFormatter
です:
「aaa」は使用しないでください。「aaa」を使用する場合は、「hh」を指定してください
小文字hh
は AM または PM 内の時間 (01 から 12) を表すため、AM/PM マーカーが必要です。
その他のヒント
- あなたのデータベースでは、SQLite には組み込みの datetime 型がないことを理解しているので、たとえば、標準の ISO 8601 形式を使用し、時刻を UTC で保存します
2010-04-29T07:30:14Z
(最新のInstant
クラスは、そのような文字列をデフォルトとして解析およびフォーマットします。つまり、明示的なフォーマッターなし)。
GMT+05:30
タイムゾーンなどのオフセットを使用しないでください。Asia/Colombo、Asia/Kolkata、America/New_York などのリアルタイム ゾーンを優先します。
- 古い を使用したい場合
DateFormat
、そのparse
メソッドは を返すDate
ので、 in のキャストは必要ありませんDate lNextDate = (Date)lFormatter.parse(lNextDate);
。
質問: Android で java.time を使用できますか?
はい、java.time は古い Android デバイスでも新しい Android デバイスでも問題なく動作します。少なくともJava 6が必要です。
- Java 8 以降および新しい Android デバイス (API レベル 26 以降) では、最新の API が組み込まれています。
- Java 6 および 7 では、最新のクラスのバックポートである ThreeTen Backport を取得します (JSR 310 用の ThreeTen。下部のリンクを参照してください)。
- (古い) Android では、ThreeTen Backport の Android 版を使用します。それは ThreeTenABP と呼ばれます。
org.threeten.bp
また、サブパッケージを使用して日付と時刻のクラスをインポートしてください。
リンク