ISO 8601 Объект String to Date/Time в Android
У меня есть строка в стандартном формате ISO 8601, которая содержит дату/время, возвращенное из веб-службы, например:
String dtStart = "2010-10-15T09:27:37Z"
Как я могу получить это в объект, такой как Время или Дата? Я изначально хочу вывести его в другом формате, но позже ему придется делать другие вещи (т.е., Возможно, использовать в другом формате).
ура
Ответы
Ответ 1
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();
}
Это то, что вы ищете. Существует существующее сообщение об этой проблеме.
Ответ 2
Этот вопрос был задан в 2010 году, и тогда было правильно, что либо SimpleDateFormat
, либо Joda-Time будут инструментами, которые вы должны использовать. Это довольно давно, сейчас. Сегодня использовать
Instant iStart = Instant.parse(dtStart);
Да, это так просто. Ваша строка имеет формат ISO 8601, а классы из java.time
, современного Java-API даты и времени, анализируют ISO 8601 без какого-либо явного средства форматирования. Instant
- только один из этих классов.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time
прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6.
- В Java 8 и более поздних версиях, а также на более новых устройствах Android (от 26 уровня API, я сказал, что) современный встроенный API.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. ссылки внизу).
- На (более старом) Android используйте Android-версию ThreeTen Backport. Его называют ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки
Ответ 3
Вы можете использовать метод простого анализа Java SimpleDateFormat или использовать JodaTime DateTimeFormat создать файл DateTimeFormatter и проанализировать объект DateTime соответственно
Ответ 4
Предположим, вы хотели бы рассчитать разницу во времени, учитывая значения, разделенные столбцами.
конец → 15:24:04
начало → 09:27:37
Без использования Date и 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");