Приложение вылетает, когда я использую класс SimpleDateFormat с "YYYY" - PullRequest
0 голосов
/ 29 мая 2018

Я использую класс SimpleDateFormat, чтобы получить текущий год, подобный этому

SimpleDateFormat currentYear = new SimpleDateFormat("YYYY");
Date thisYear = new Date();
String stringThisYear  = currentYear .format(thisYear );

Здесь (Индия) он работает нормально, но он разбился, когда его запускали в Малайзии другие люди. После многих отладок ипоиск, я обнаружил, что это происходит из-за отсутствия упоминания о locale.So я изменил свой код на этот

SimpleDateFormat currentDate = new SimpleDateFormat("YYYY", Locale.ENGLISH);

Все еще происходит сбой, поэтому я использую экземпляр календаря, чтобы получить текущий год, как этот

 int thisYear=Calendar.getInstance().get(Calendar.YEAR);

Но я хочу знать, в чем проблема с simpleDateFormat, так как большая часть моего кода уже имеет класс simpleDateFormat. Поэтому я хочу знать причину сбоя, если у кого-то есть решение, пожалуйста, помогите мне. Спасибо

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Я сталкиваюсь с той же проблемой, используя это, он работает нормально.

 SimpleDateFormat formatter = new SimpleDateFormat("YYYY",Locale.US);
0 голосов
/ 29 мая 2018

Это потому, что вы должны использовать «yyyy» вместо «YYYY»

В старых версиях Android при использовании «YYYY» происходит сбой приложения.Ничего общего со страной / языком

"Y" обозначает год недели, а не год, как указано в Javadoc

EDIT 2

Подробнее информация здесь

yyyy - строка шаблона для определения года в классе SimpleDateFormat.

Java 7 представила YYYY какновый шаблон даты для определения даты недели года.

Средний год составляет ровно 52,1775 недели, что означает, что в конечном итоге год может иметь 52 или 53 недели с учетом неделимых недель.

Использование YYYYнепреднамеренное форматирование даты может привести к серьезным проблемам в приложении Java.

Как упоминалось @ OleV.V., формат Y поддерживается только в Android API 24+.Использование любых версий ниже API 24 приводит к сбою приложения.

0 голосов
/ 29 мая 2018

Попробуйте использовать локаль по умолчанию для устройства, подобного этому

SimpleDateFormat currentDate = new SimpleDateFormat("YYYY", Locale.getDefault());
...