Как преобразовать строку в дату объекта? - PullRequest
1 голос
/ 24 августа 2011
String date="2006-06-21T15:57:24.000Z";

Как преобразовать эту строку в объект Date без изменения этого формата в Android?

Ответы [ 5 ]

3 голосов
/ 24 августа 2011

Вот простой код для этого:

  private Date parseDate(String date) {
    SimpleDateFormat curFormater = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.S'Z'");
    Date dateObj = new Date();
    try {
      dateObj = curFormater.parse(date);
    } catch (ParseException e) {
      e.printStackTrace();
    }
    return dateObj;
  }
2 голосов
/ 24 августа 2011

Используйте класс Time и проанализируйте строку.Затем используйте функцию Time toMillis () и создайте экземпляр Date.

http://developer.android.com/reference/android/text/format/Time.html#parse3339(java.lang.String)

1 голос
/ 24 августа 2011

См. SimpleDateFormat, http://developer.android.com/reference/java/text/SimpleDateFormat.html

Этот класс преобразует строки в даты и наоборот, используя заданный шаблон.

После того, как вы создали SimpleDateFormat с правильным шаблоном, вы можете использовать его для преобразования строки в Date, использования даты по своему усмотрению и в конечном итоге для преобразования Date обратно в String с использованием того же экземпляра SimpleDateFormat.

РЕДАКТИРОВАТЬ: уточнение часовых поясов

В вопросе не указывается, является ли данная строка «чистой» датой ISO 8601, и в этом случае нужно ли вам поддерживать несколько часовых поясов или нет, если эти часовые пояса будут представлены только числами (+0200 как в RFC 822), числа с двоеточием (+02: 00, как разрешено ISO 8601) или в качестве имен (EST и т. д.).

Если строка является чистой строкой ISO 8601, то у SimpleDateFormat возникнут некоторые проблемы с декодированием часового пояса. Однако, если это «всегда Z» (что означает, что данные часового пояса не имеют смысла, и вы можете спокойно их игнорировать), или использует числа без двоеточий (например, +0200 и т. Д.), Или использует имена часовых поясов, тогда SimpleDateFormat может обработать их правильно .

0 голосов
/ 21 сентября 2018

Я пришел сюда, потому что это был, предположительно, ответ на вопрос Скрытый RFC3339 DateTime to Date в java .Однако Time является устаревшим классом в Android начиная с уровня API 22.

Простой ответ основан на этот :

import com.google.api.client.util.DateTime;

Date date = new Date(new DateTime("2006-06-21T15:57:24.000Z").getValue());
0 голосов
/ 17 октября 2016

tl; dr

Как преобразовать эту строку в объект Date

Date заменено на java.time.Instant.

Instant.parse( "2006-06-21T15:57:24.000Z" )

без изменения этого формата

Объекты даты и времени не имеют «формата».Только текст имеет формат.

String output = instant.toString() ;  // Generate text in a `String` object in standard ISO 8601 format that represents the value of the `Instant` date-time object.

ISO 8601

Эта строка ввода имеет стандартный формат ISO 8601 .Z в конце - это сокращение Zulu и означает UTC .

java.time

Классы java.time по умолчанию используют форматы ISO 8601, когдаРазбор и генерация строк, представляющих значения даты и времени.

Класс Instant представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).

Instant instant = Instant.parse( "2006-06-21T15:57:24.000Z" );

Чтобы сгенерировать строку в стандартном формате ISO 8601, наберите toString.

String output = instant.toString(); 

2006-06-21T15: 57:24Z

String! = Дата-время

Не объединяйте объект даты-времени со строкой, представляющей значение.Объект даты и времени может анализировать строку и может генерировать строку, но не является строкой.Другими словами, строка может быть введена и / или выведена, но не является самим объектом даты-времени.

Итак, ваш вопрос «Как преобразовать эту строку в объект Date без изменения этого формата» делаетне имеет смысла.

Чтобы сгенерировать строку в форматах, отличных от ISO 8601, преобразуйте ваш Instant в OffsetDateTime или ZonedDateTime объект и используйтекласс DateTimeFormatter.Поиск Переполнение стека для DateTimeFormatter, чтобы увидеть больше обсуждений и много примеров.

Конверсия

По возможности избегайте старого java.util.Date класса.Но если вам нужно взаимодействовать со старым кодом, который еще не обновлен до типов java.time, вы можете преобразовать его в / из java.time с помощью новых методов, добавленных к старым классам даты и времени.

java.util.Date utilDate = java.util.Date.from( instant );

… иидти в другом направлении…

Instant instant = utilDate.toInstant();

О java.time

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

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

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

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

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

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии реализации пакета Android для java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...