2014-11-07 3 views
0

У меня есть спецификация, которая вернет историю платежей JSON после успешной транзакции. Ответ третьей стороны JSON имеет поле для общего времени, затраченного на транзакцию. В качестве примера общее время, проведенное при составлении истории платежей, было «00: 10: 10.0». Как преобразовать этот формат в этот объект String в целочисленный примитив.Анализ времени в Java

+1

И что должно быть значением примитива 'int'? что ты уже испробовал? –

+0

@NorbertRadyk Я хочу преобразовать эту конкретную строку в форму long/double/int, так как спецификация говорит, что это общее время, которое сделала транзакция. Я делаю простой раскол и вычисляю секунды. Как упоминается в спецификации как ISO 8601, следовательно, путаница. Хотите знать, есть ли что-то конкретное, чтобы заботиться о формате. – Amz

+0

Вы пытались найти спецификацию для ISO 8601 и прочитать ее? Может помочь ... –

ответ

3

Если вы не возражаете, используя внешнюю библиотеку, а затем с помощью Joda'sorg.joda.time.LocalTime может помочь со строкой разборе:

String duration = "00:10:10.0"; 
int seconds = LocalTime.parse(duration).getMillisOfDay()/1000; 
//returns 610 

Пожалуйста, обратите внимание, что, так как вы соблюдать ИСО форматированием вы даже не необходимо явно указать разборный формат.

Кроме того, если вы используете Java-уже, чем Joda был использован в качестве вдохновения для новой даты/время библиотек доступны там, поэтому вы найдете подобный класс в стандартной библиотеке: LocalTime

1

Ответ Радыка правильный. Поскольку в Вопросе упоминается Длительность ISO 8601, я добавлю этот вывод строки.

java.time

Каркас java.time встроен в Java 8 и более поздних версий. Вдохновленный Joda-Time. Расширена в рамках проекта ThreeTen. Привлечен к Java 6 & 7 проектом ThreeTen-Backport и Android от проекта ThreeTenABP.

String durationAsLocalTimeString = "00:10:10.0"; 
LocalTime durationAsLocalTime = LocalTime.parse(durationAsLocalTimeString); 
Duration duration = Duration.between(LocalTime.MIN , durationAsLocalTime); 
String output = duration.toString(); 

PT10M10S

ISO 8601 Продолжительность Формат

Этот выход PT10M10S является стандартным Duration format из PnYnMnDTnHnMnS определяется ISO 8601. P отмечает начало, T отделяет часть лет-месяцев-дней от части часов-минут-секунд.

Я предлагаю сериализацию строк в этом формате. Использование формата времени дня, такого как 00:10:10.0 для представления прошедшего времени, является запутанным и подверженным ошибкам. Формат ISO 8601 является очевидным и интуитивным и решает проблему двусмысленности.

Как java.time, так и Joda-Time используют эти ISO 8601 форматы по умолчанию при разборе/генерации текстовых представлений значений даты и времени.

Duration duration = Duration.parse("PT10M10S"); 
Смежные вопросы