Подтвердить что ты не робот

ISO 8601 Объект String to Date/Time в Android

У меня есть строка в стандартном формате ISO 8601, которая содержит дату/время, возвращенное из веб-службы, например:

String dtStart = "2010-10-15T09:27:37Z"

Как я могу получить это в объект, такой как Время или Дата? Я изначально хочу вывести его в другом формате, но позже ему придется делать другие вещи (т.е., Возможно, использовать в другом формате).

ура

4b9b3361

Ответ 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 с подпакетами.

Ссылки

Ответ 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");