Как преобразовать «гггг-ММ-дд'ТХЧ: мм: ссZZZZZ» в «гггг-ММ-дд» без добавления одного дня в Android? - PullRequest
1 голос
/ 23 апреля 2020

Я развиваюсь в Android

День Строки 2020-04-23T23: 59: 59-04: 00

И попробуйте использовать следующая функция для преобразования времени в 2020-04-23

fun changeDateFormat(strDate:String):String {
    return SimpleDateFormat("yyyy-MM-dd").format(SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ").parse(strDate))
}

Но она показывает 2020-04-24

Неужели я что-то упустил? Заранее спасибо.

Ответы [ 3 ]

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

Вы должны использовать DateTimeFormatter и LocalDate из java.time.

, например

val timestampAsDateString = "2020-04-23T23:59:59-04:00"
val format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZZZZZ")

val date = LocalDate.parse(timestampAsDateString, format)

Log.d("parseTesting","Date : ${date}") // logs 2020-04-23

, поскольку LocalDate - это дата без часового пояса в ISO-8601 система календаря, вывод уже в формате yyyy-MM-dd.

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

вот как вы можете этого достичь

val dateInString = "2020-04-23T23:59:59-0400"
val ldt: LocalDateTime = LocalDateTime.parse(dateInString, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"))
val currentZoneId: ZoneId = ZoneId.systemDefault()
val currentZonedDateTime: ZonedDateTime = ldt.atZone(currentZoneId)
val format: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val formattedDate = format.format(currentZonedDateTime)
println(formattedDate)
0 голосов
/ 23 апреля 2020

Ваше время не должно содержать двоеточия между (-04: 00)

Это хорошо сработало для меня и вернуло желаемый результат

fun changeDateFormat(strDate:String):String {
    val sourceSdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault())
    val requiredSdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
    return requiredSdf.format(sourceSdf.parse(strDate))
}
...