Создание объектов Date в Kotlin для уровня API меньше или равного 16 - PullRequest
0 голосов
/ 18 октября 2019

Это может звучать очень смешно и просто, но я пытаюсь создать объект типа DateTime в Котлине, передавая ему количество секунд от эпохи.

Либо примеры, которые я получаю,библиотеки, которые требуют API уровня 26 или просто говорят о преобразовании формата из строки DD-MM-YYYY в какую-то другую.

Я пробовал "LocalDateTime", "Timestamp", "Date" до сих пор, ноKotlin либо отказывается их распознавать, либо не соглашается с параметрами функции, либо не может разрешить конфликт пространства имен. Или примеры Java, которые не работают в Kotlin или не имеют эквивалента в Kotlin.

С Date () Я получаю сообщение об ошибке «Не удается получить доступ»: это закрыто в Date ()«

С LocalDate, LocalDateTime я получаю ошибку уровня API

С отметкой времени я получаю ошибку« Ни одна из следующих функций не может быть вызвана с предоставленными аргументами ». Я передаю Long как параметр, упомянутый в документации. Но ожидается «Посылка» или «Дата».

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 18 октября 2019

tl; dr

Избегать устаревших классов даты и времени

Унаследованные классы, такие как Date & Calendar являются ужасными , созданными людьми, которые не понимали обработку даты и времени. Эти классы были вытеснены несколько лет назад современными java.time классами, определенными в JSR 310.

java.time

*Класс 1039 * заменяет класс Date, оба представляют момент в UTC (смещение нуля часов-минут-секунд).

Instant instant = Instant.now() ;  // Capture the current moment in UTC.

Класс Calendar или, точнее, его наиболее часто используемый подкласс бетона GregorianCalendar заменен на ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;  // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone). 

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

Преобразование

Лучше всего полностью избегать устаревших классов даты и времени. Но иногда вам может потребоваться взаимодействие со старым кодом, который еще не обновлен до java.time . В этом случае, конвертировать. Посмотрите на новые to… / from… методы преобразования, добавленные к старым классам.

Calendar calendar = GregorianCalendar.from( zdt ) ;

… и…

ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;

Back-port

The *Классы 1074 * java.time встроены в Java 8 и более поздние версии, а также в Android 26 и более поздние.

Для Java 6 и 7 используйте задний порт, найденный в проекте ThreeTen-Backport . Большая часть функциональности java.time находится там. Этот проект возглавляет тот же человек, который возглавляет проект java.time и JSR 310, Стивен Коулборн .

Для Android до 26, используйте адаптацию этого-порт на Android, проект ThreeTenABP .

Table of which java.time library to use with which version of Java or Android

1 голос
/ 18 октября 2019

Я использую Календарь для Kotlin

val date = Calendar.getInstance()
date.timeInMillis = 5000000
txtDate.text = date.time.toString()
0 голосов
/ 18 октября 2019

Это у вас работает?

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