Unicode ICU, а не Java.Time.DateTimeFormatter, следует использовать для международных дат и времениJAVA

Программисты JAVA общаются здесь
Anonymous
Unicode ICU, а не Java.Time.DateTimeFormatter, следует использовать для международных дат и времени

Сообщение Anonymous »

У меня есть проблема, о которой сообщает Sonarqube. На очень простой части кода: < /p>
Instant.now().atZone(ZoneId.systemDefault()).toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"))
< /code>
Я получил помещение для меня с чем-то очень странным:
i18n-java: v1009 < /p>
Unicode ICU and not java.time.DateTimeFormatter should be used for international dates and times

Java's DateTimeFormatter is quite error prone prior to Java version 9. Version 9 and greater with Unicode CLDR data is much improved, but still has errors for key locales. For ideal results, use Unicode ICU DateTimePatternGenerator.

Noncompliant Code Example

Locale userPreferredLocale = Locale.forLanguageTag("zh-Hans");
...
DateTimeFormatter mediumFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(userPreferredLocale);

Compliant Solution

import com.ibm.icu.text.DateTimePatternGenerator;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.ULocale;
...
ULocale userPreferredLocale = ULocale.forLanguageTag("zh-Hans");
...
DateTimePatternGenerator dtpg = DateTimePatternGenerator.getInstance(userPreferredLocale);
//pattern for com.ibm.icu.text.DateFormat.FULL="MMM DD,YYYY,h:mm A"
SimpleDateFormat sdf = new SimpleDateFormat(dtpg.getBestPattern("MMM dd, YYYY, h:mm A"), uloc);
< /code>
Я использую Java 11 и хотел бы избежать импорта этого пакета IBM.
Я совершенно не уверен, какова текущая проблема (код, работающий до сих пор). < /p>
Но я действительно очень заинтересован в решении этого. Есть ли «хороший способ», чтобы достичь этого, пожалуйста? Пожалуйста.


Подробнее здесь: https://stackoverflow.com/questions/655 ... ernational

Вернуться в «JAVA»