java.time
Хотя в 2010 году java.util.Date
был классом, который мы все использовали (вместе с DateFormat
и Calendar
), эти классы всегда были плохо спроектированы и теперь давно устарели. Сегодня можно использовать java.time, современный Java-интерфейс даты и времени.
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
для часового пояса. Предпочитайте часовой пояс, например, Азия / Коломбо, Азия / Калькутта или Америка / Нью-Йорк.
- Если вы хотите использовать устаревший
DateFormat
, его метод parse
возвращает Date
, поэтому вам не нужно приведение в Date lNextDate = (Date)lFormatter.parse(lNextDate);
.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) встроен современный API.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На более старых (Android) версиях Android используется ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки