ISO 8601 String на сегодняшний день / Time Object в Android
Вопрос
У меня есть строка в стандарте ISO 8601. Формат, который содержит дату / время, возвращаемое из веб-сервиса, как так:
String dtStart = "2010-10-15T09:27:37Z"
Как я могу получить это в объект, такой как время или дата? Я изначально хочу выводить его в другом формате, но позже нужно будет делать другие вещи позже (то есть, возможно, использовать в другом формате).
Ваше здоровье
Решение
String dtStart = "2010-10-15T09:27:37Z";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
Date date = format.parse(dtStart);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
Это то, что вы ищете. Есть существующий пост об этой проблеме.
Другие советы
Этот вопрос был задан в 2010 году и вернулся тогда, что это было исправлено, что либо SimpleDateFormat
Или Joda-Time будет инструменты, которые вы должны использовать. Это довольно давно назад сейчас. Сегодня использование
Instant iStart = Instant.parse(dtStart);
Да, это просто. Ваша строка в формате ISO 8601, а классы из java.time
, современные API Java Date и Time Parse ISO 8601 без какого-либо явного форматирования. Instant
это только один из этих классов.
Вопрос: Могу ли я использовать Java.time на Android?
Да, java.time
Хорошо работает на старших и более новых устройствах Android. Это просто требует, по крайней мере, Java 6.
- В Java 8 а позже и на более новых устройствах Android (от API Level 26, мне сказали), встроенный современный API.
- В Java 6 и 7 получают Backport Threeten, Backport новых классов (Threeten для JSR 310; см. Ссылки внизу).
- В (более старый) Android используйте Android Edition Threeten Backport. Это называется Threetenabp. И убедитесь, что вы импортируете дату и классы времени от
org.threeten.bp
с подпаками.
Ссылки
- Оракул Учебник: дата времени Объясняя, как использовать
java.time
. - Запрос спецификации Java (JSR) 310, куда
java.time
был впервые описан. - Проект Backport Threeten Backport., задница
java.time
к Java 6 и 7 (Threeten для JSR-310). - Threetenabp., Android Edition Threeten Backport
- Вопрос: Как использовать THRETENABP в Android Project, с очень тщательным объяснением.
- Статья Wikipedia: ISO 8601
Вы можете использовать SimpleDateFormat метод анализа или использовать Datetimeformat jodatime создать dateTimeformatter и Разбор к объекту dateTime соответственно
Предположим, вы хотели бы рассчитать разницу времени, учитывая значения разделения столбца.
финиш --> 15:24:04
Начало --> 09:27:37
Без использования Дата а также SimpleDateFormat., Я сделал этот путь:
String tStart = "09:27:37";
String tFinish = "15:24:04";
String[] sTimeHourMinSec = tStart.split(":");
int sHour = Integer.valueOf(sTimeHourMinSec[0]);
int sMin = Integer.valueOf(sTimeHourMinSec[1]);
int sSec = Integer.valueOf(sTimeHourMinSec[2]);
String[] fTimeHourMinSec = tFinish.split(":");
int fHour = Integer.valueOf(fTimeHourMinSec[0]);
int fMin = Integer.valueOf(fTimeHourMinSec[1]);
int fSec = Integer.valueOf(fTimeHourMinSec[2]);
int diffTotSec = (fHour - sHour) * 3600 + (fMin - sMin) * 60 + (fSec - sSec);
int diffHours = diffTotSec / 3600;
int diffMins = (diffTotSec % 3600) / 60;
int diffSecs = (diffTotSec % 3600) % 60;
System.out.println("Difference: " + diffHours + " h " + diffMins + " m " + diffSecs + " sec");