To ćwiczenie pochodzi z książki Horstmann za Rdzeń Java dla niecierpliwych:Wyświetlacz czasu w Javie cyframi tajskich
napisać program, który pokazuje datę i czas stylów formatowania w [...] Tajlandii (z tajskimi cyframi).
Próbowałem rozwiązać exerciese z następującym fragmencie:
Locale locale = Locale.forLanguageTag("th-TH-TH");
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(formatter.withLocale(locale).format(dateTime));
Problem polega na tym, że podczas gdy nazwa miesiąca jest prawidłowo podane w Tajlandii (przynajmniej tak mi się wydaje, bo nie wiedzieć Thai), cyfry są nadal formatowane cyframi arabskimi, a ich wynik jest następujący:
3 ก.ย. 2017, 22:42:16
Próbowałem różnych znaczników języka ("th-TH"
, "th-TH-TH"
, "th-TH-u-nu-thai"
) bezskutecznie. Co powinienem zmienić, aby program zachowywał się zgodnie z oczekiwaniami? Używam JDK 1.8.0_131 na Windows 10 64 bit.
Dobre pytanie i odpowiedź. Ale FYI, ['LocalDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html) celowo odrzuca informacje o strefie czasowej. Lepiej używać ['ZonedDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html) i zachować cenne informacje. Lepiej jawnie przekazać pożądaną/oczekiwaną strefę czasową do jednej z metod klasy '' .now (ZoneId) 'zamiast polegać niejawnie na bieżącej domyślnej strefie czasowej maszyny JVM, którą można zmienić w dowolnym momencie podczas wykonywania. –
To jest przydatne pytanie i odpowiedź, ale wciąż mnie zastanawiasz, jak masz zamiar kiedykolwiek sprawdzić, czy kod jest poprawny, jeśli nie możesz zrozumieć wyników. :) – ajb
@ajb Wyjście wygląda dla mnie przekonująco, nie-zachodnie :) – lukeg