Пожалуйста, как мне отформатировать эти строки даты: 2017-04-08T18:39:42Z
или 2023-04-04T14:01:31-07:00
, чтобы получить что-то вроде этого: August 04, 2017 | 6:39pm
. Заранее спасибо.
Я пробовал что-то вроде этого ниже:
@RequiresApi(Build.VERSION_CODES.O)
private fun formatDate(date: String): String {
return try {
val datePattern = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss", Locale.ENGLISH)
val offSetDateTime = OffsetDateTime.parse(date, datePattern)
val formattedDate = "${offSetDateTime.month} ${offSetDateTime.dayOfMonth}, ${offSetDateTime.year}"
Log.i("formattedDate", formattedDate)
formattedDate
} catch (e: Exception) {
date
}
}
Это не работает. Он возвращает строку, переданную в качестве аргумента, в слове порядка, он генерирует исключение.
OffsetDateTime.parse
требуется строка, содержащая смещение (+/-hh:mm)
Разберите его с помощью LocalDateTime.parse
val dateSt = "2017-04-08T18:39:42Z"
val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")
val formattedDate = LocalDateTime.parse(dateSt, dateFormatter)
val res = DateTimeFormatter.ofPattern("MMMM dd, yyyy | hh:mma").format(formattedDate) // August 04, 2017 | 6:39pm
Спасибо @ахмед. Это сработало. Но знаете ли вы, как я могу это реализовать, если строка выглядит так: 2023-04-04T14:01:31-07:00
?
@Trailblazer, который вы можете использовать DateTimeFormatter.ISO_OFFSET_DATE_TIME
в качестве предопределенного средства форматирования, вы можете проверить эту страницу для получения дополнительных предопределенных средств форматирования docs.oracle.com/javase/8/docs/api/java/time/format/…
Спасибо за ваш ответ @ahmed. Это то, что я сделал позже. Работает.
Просто бросьте
datePattern
.OffsetDateTime
анализирует обе ваши строки без какого-либо явного средства форматирования, потому что они обе в формате ISO 8601:val offSetDateTime = OffsetDateTime.parse(date)
. Не забудьте преобразовать проанализированные дату и время в часовой пояс, который ожидает ваш пользователь, например:offsetDateTime.atZoneSameInstant(ZoneId.systemDefault())
. Потому что ваш пользователь не может использоватьAugust 04, 2017 | 6:39pm
ни для чего, если он понимается по смещению UTC, которого они не знают. А затем используйтеDateTimeFormatter
для форматирования в нужную строку.