Для приложения для Android мне нужно проанализировать дату в тайском локальном формате (например, 2019 год должен быть возвращен как 2562). Я не понимаю, как я могу это сделать. В настоящее время используется SimpleDateFormatter
для анализа даты в локальном формате по умолчанию.
fun adjustTimePattern(dateString: String, oldPattern: String, newPattern: String): String? {
val dateFormat = SimpleDateFormat(oldPattern, Locale.getDefault())
dateFormat.timeZone = TimeZone.getTimeZone("UTC")
return try {
val calendar = Calendar.getInstance()
calendar.time = dateFormat.parse(dateString)
val newFormat = SimpleDateFormat(newPattern, Locale.getDefault())
newFormat.format(calendar.time)
} catch (e: ParseException) {
return null
}
}
Пытался жестко закодировать значение локали (использовал Locale("th", "TH")
вместо Locale.getDefault()
), но ему повезло, поскольку класс SimpleDateFormat использует сам григорианский календарь.
Пробовали также использовать LocalDate
и DateTimeFormatter
, но значение года никоим образом не меняется.
fun formatTime(pattern: String): String {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val formatter = DateTimeFormatter.ofPattern(pattern, Locale("th", "TH"))
LocalDate.now().format(formatter)
} else {
""
}
}
.
Может ли кто-нибудь помочь мне в этом?
LocalDate
по своей сути является датой в ISO/пролептическом григорианском календаре, поэтому не будет работать для тайских дат. Ответ показывает решение, которое я считаю отличным. - person Ole V.V.   schedule 24.10.2019