Разобрать дату в определенном формате с помощью тайского календаря в Android - PullRequest
2 голосов
/ 24 октября 2019

Для приложения 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 {
        ""
    }
}

.

Кто-нибудь может мне помочь в этом?

Ответы [ 2 ]

4 голосов
/ 24 октября 2019

ThaiBuddhistDate класс

Вы можете использовать java.time.chrono.ThaiBuddhistDate, чтобы сделать это, см. Следующий пример:

public static void main(String[] args) throws ParseException {
    ThaiBuddhistDate tbd = ThaiBuddhistDate.now(ZoneId.systemDefault());
    System.out.println(tbd.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}

Вывод, который я получаюмоя система

2562-10-24

Большинство функций java.time перенесено на Java 6 и Java 7 в ThreeTen-Backport проект. Дополнительно адаптировано для более ранних версий Android (<26) в <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP . См. Как использовать ThreeTenABP… .

0 голосов
/ 24 октября 2019

Поскольку вы уже используете java.util.Calendar и java.text.SimpleDateFormat.

Если вы можете изменить языковой стандарт при создании экземпляра Календаря, это должно работать:

val thaiCalendar = Calendar.getInstance(Locale("th", "TH"))
println(thaiCalendar.get(Calendar.YEAR)) // prints 2562

Но, если выпросто хочу изменить формат, у меня это сработало:

val notThaiCalendar = Calendar.getInstance()
val thaiFormatter = SimpleDateFormat("yyyy-MM-dd", Locale("th", "TH"))
println(thaiFormatter.format(notThaiCalendar.time)) // prints 2562-10-24

РЕДАКТИРОВАТЬ

Это решение не тестировалось на Android

...