Как привести дату и время в Android - PullRequest
0 голосов
/ 07 апреля 2020

В моем приложении я хочу получить некоторые данные с сервера, и я должен привести дату и время!
Я получаю дату и время с этим форматом end_date: "2020-04-08 13:11:14" с сервера.

Я хочу получить теперь дату и время с моего устройства и рассчитать с указанной выше датой ( end_date ), если это время меньше 24 часов , я должен показать, например, 15 час спустя , но если на этот раз больше 24 часов я должен показать 2 дня спустя !

Но я не знаю, как я могу это сделать?
Можете ли вы помогите мне отправить код или отправить мне другие учебники?!
Я искал это, но ничего не нашел.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

java .time

В современном подходе используются java .time классы.

Table of date-time types in Java, both modern and legacy

Анализировать входную строку как LocalDateTime.

Для анализа замените ПРОБЕЛ в середине на T, чтобы соответствовать ISO 8601 стандарт.

String input = "2020-04-08 13:11:14".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

В вашем входе отсутствует индикатор какого-либо часового пояса или смещения от UT C. Таким образом, мы не знаем, было ли это в 13:00 в Токио, Япония, в 13:00 в Тулузе, Франция или в 13:00 в Толедо, Огайо, США. Таким образом, вы не можете надежно сравнить это с текущей датой и временем.

Если вы хотите предположить , эта строка должна была указывать время в вашем часовом поясе, а затем назначить часовой пояс, чтобы получить ZonedDateTime.

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime then = ldt.atZone( z ) ;

Захватить текущий момент в той же зоне.

ZonedDateTime now = ZonedDateTime.now( z ) ;

Рассчитать через 24 часа.

ZonedDateTime twentyFourHoursFuture = now.plusHours( 24 ) ;

Сравните.

boolean within24Hours = then.isBefore( twentyFourHoursFuture ) ;

Если вы хотите доверять текущему часовому поясу JVM по умолчанию, позвоните ZoneId.systemDefault. Помните, что это значение по умолчанию может быть изменено другим Java кодом во время выполнения вашего приложения.

ZoneId z = ZoneId.systemDefault() ;

О java .time

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

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

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

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

Где взять классы java .time?

  • Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 и более поздних версий - часть стандартного API Java со связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 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… .

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

1 голос
/ 07 апреля 2020

Попробуйте использовать библиотеку datetime , или вы можете увидеть этот ответ .

Также, если вы можете выбрать, это хорошая привычка передавать время в UT C с / на сервер, это избавит от некоторых проблем с локализацией и часовым поясом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...