2015-04-08 4 views
-1

В приложении Android я пытаюсь разобрать дату из строки, чтобы найти разницу между двумя раз.android java parse date from string

SimpleDateFormat dateFormatDateAndTime = new SimpleDateFormat("ddMMyyyyHHMM"); 
Date startDateTime = dateFormatDateAndTime.parse("060420150134"); 
Log.v(TAG, "startDateTime: " + startDateTime); //Fri Oct 06 01:00:00 GMT+05:30 2017 

Итак, я должен разобрать 060420150134, так что я получаю 06 Apr 2015 01:34 и что мой формат ddMMyyyyHHMM

Но я здесь Fri Oct 06 01:00:00 GMT+05:30 2017

Так что я делаю то, что случилось? Как разбираться здесь?

+2

Вы используете 'ММ' дважды. Второй должен быть «мм», минут, а не месяцев. (Я бы также предположил, что основная часть кода в вопросе не имеет значения, вам просто нужны три строки: создайте SimpleDateFormat, проанализируйте текст, распечатайте результат.) –

+0

Возможный дубликат [синтаксический анализ даты из строки дает исключение в android] (http://stackoverflow.com/questions/29092277/parse-a-date-from-string-gives-exception-in-android) – Signare

+0

@JonSkeet, поэтому MM используется в течение месяца и мм в течение нескольких минут? Я прав? –

ответ

3

Вы должны изменить второй ММ (месяцев) в мм (мин):

SimpleDateFormat dateFormatDateAndTime = new SimpleDateFormat("ddMMyyyyHHmm"); 
0
Log.v(TAG, "startDateTime: " + startDateTime + "stopDateTime: " + stopDateTime); 
//Fri Oct 06 01:00:00 GMT+05:30 2017 Fri Jan 06 04:00:00 GMT+05:30 2017 

Вы выход дата объекта, а не строка. Когда вы используете это: «startDateTime:» + startDateTime + «stopDateTime:» + stopDateTime, java вызовет метод toString() в объектах stopDateTime и startDateTime.

0

ТЛ; Д.Р.

LocalDateTime.parse( 
    "060420150134" , 
    DateTimeFormatter.ofPattern("ddMMuuuuHHmm") 
).atOffset(ZoneOffset.UTC) 

Использование java.time

Как correct accepted Answer говорит, ваш шаблон форматирования неверен.

Кроме того, вы используете неприятные старые классы времени, которые теперь являются устаревшими, вытесняются классами java.time. См. Ниже информацию о Android.

Коды кода форматирования аналогичны, но не точно идентичны. Поэтому изучите класс doc для DateTimeFormatter.

String input = "060420150134" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern("ddMMuuuuHHmm"); 

В вашей строке ввода отсутствует какой-либо индикатор смещения-от-UTC или часового пояса. Поэтому мы анализируем как LocalDateTime.

LocalDateTime ldt = LocalDateTime.parse(input , f); 

Если вы знаете наверняка часовой пояс или смещение, предназначенное для этих данных, применить ZoneId получить ZonedDateTime или применить ZoneOffset получить OffsetDateTime. По-видимому, в вашем контексте предназначен UTC.

OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC) ; 

О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8 и SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.