У меня есть проблема, о которой сообщает 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