ISO 8601 Строка в дату / время объекта в Android - PullRequest
45 голосов
/ 15 октября 2010

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

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

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

Приветствия

Ответы [ 4 ]

117 голосов
/ 15 октября 2010
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) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}

Это то, что вы ищете.Существует существующий пост об этой проблеме.

6 голосов
/ 23 мая 2018

Этот вопрос был задан в 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 (как мне сказали, от уровня API 26) современный API поставляется встроенным.
  • В Java 6 и 7 получить ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

2 голосов
/ 15 октября 2010

Вы можете использовать Метод анализа Java SimpleDateFormat или использовать DateTimeFormat JodaTime для создания DateTimeFormatter и синтаксический анализ объекта DateTime * соответственно 1006

0 голосов
/ 23 мая 2018

Предположим, что вы хотите вычислить разницу во времени, учитывая значения, разделенные столбцами.
финиш -> 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");
...