Android - преобразование текущей даты и времени в часовой пояс - PullRequest
0 голосов
/ 27 сентября 2018

Как я могу преобразовать текущее время, как этот формат 2018-09-21T01: 56: 57.926986 + 00: 00 на Android ?.Я использую DateFormat, но я не знаю, как добавить часовой пояс на него.Это код, который я использую при получении текущей даты и времени

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
                                    Date date = new Date();
                                    String curDate = dateFormat.format(date);

Заранее спасибо

1 Ответ

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

tl; др

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

OffsetDateTime            // Represent a moment as a date, a time-of-day, and an offset-from-UTC (a number of hours, minutes, seconds) with a resolution as fine as nanoseconds.
.now(                     // Capture the current moment. 
    ZoneOffset.UTC.       // Specify your desired offset-from-UTC. Here we use an offset of zero, UTC itself, predefined as a constant.
)                         // Returns a `OffsetDateTime` object.
.format(                  // Generate text in a `String` object representing the date-time value of this `OffsetDateTime` object.
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSSSSxxxxx" , Locale.US )
)                         // Returns a `String` object.

2018-09-27T05: 39: 41.023987 + 00: 00

Или используйте Z для UTC.

Instant.now().toString()

2018-09-27T05: 39: 41.023987Z

Java.время

Современный подход использует java.time , который вытеснил ужасные старые классы даты и времени.

В частности:

  • Использование Instant или OffsetDateTime вместо java.util.Date.
  • Используйте DateTimeFormatter вместо `SimpleDateFormat.

Получите текущее время в UTC.Мы используем класс OffsetDateTime вместо Instant для более гибкого форматирования при генерации текста.

ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.now( offset );

Определите шаблон форматирования, соответствующий желаемому результату.Обратите внимание, что встроенные шаблоны форматирования используют Z в качестве стандартного сокращения для +00:00.Z означает UTC и произносится как «зулу».Этот формат времени Зулу довольно распространен.Я предлагаю использовать такие форматы с Z.Но вы явно запросили длинную версию смещения от UTC, равную нулю, поэтому мы должны использовать пользовательский объект DateTimeFormatter.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSSSSxxxxx" , Locale.US );
String output = odt.format( f );

2018-09-27T05: 39: 41.023987 + 00: 00

К вашему сведению, обсуждаемые здесь форматы соответствуют стандарту ISO 8601 .


О 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… .
...