В настоящее время я работаю над созданием пользовательского формата даты, который должен отображаться как "Понедельник, 8 апреля 2019 года", но всякий раз, когда я выбираю из диалогового окна и применяю простой формат даты, он возвращает дату с сокращенным месяцем и временем (которое я не нужно). Любая идея, как я могу обновить свой код, чтобы заставить его работать в вышеуказанном формате? Вот мой код:
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
String date = (++monthOfYear)+" "+dayOfMonth+", "+year;
SimpleDateFormat dateFormat = new SimpleDateFormat("E MMM dd yyyy");
dateFormat.format(new Date());
Date convertedDate = new Date();
try {
convertedDate = dateFormat.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myDate.setText(convertedDate.toString());
}
DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
.withLocale(Locale.US);
LocalDate date = LocalDate.of(year, ++monthOfYear, dayOfMonth);
String formattedDate = date.format(dateFormatter);
Я использую java.time, современный API даты и времени Java. Предложения Date/Time, которые вы пытались использовать, SimpleDateFormat
и Date
, давно устарели и плохо разработаны, первые, в частности, заведомо хлопотны, поэтому я не хотел их использовать.
Понедельник, 8 апреля 2019 г.
Да, java.time прекрасно работает на старых и новых устройствах Android. Это просто требует как минимум Java 6.
org.threeten.bp
с подпакетами.year
, monthOfYear
и dayOfMonth
в строку, которую вы пытаетесь проанализировать, что является обходным путём, но, что еще хуже, строка не имеет формат E MMM dd yyyy
, поэтому ее синтаксический анализ с SimpleDateFormat
вероятно, не удался. Если вы не видели трассировку стека из e.printStackTrace();
Я полагаю, что у вас есть серьезная проблема в настройке вашего проекта, которую вы должны исправить перед написанием другой строки кода. Если вы не видите ошибок, которые происходят в вашем коде, вы кодируете с завязанными глазами. Ошибка разбора привела к отображению текущей даты, полученной из new Date()
.convertedDate.toString()
возвращает строку в формате EEE MMM dd HH:mm:ss zzz yyyy
для отображения. Например, Tue Apr 09 09:39:47 EDT 2019
. Date.toString
всегда возвращает этот формат. Он не имеет ничего общего с форматом, из которого была проанализирована дата (даже если она была успешно проанализирована), поскольку Date
- это просто момент времени, в нем не может быть формата.java.time
был впервые описан.java.time
для Java 6 и 7 (ThreeTen для JSR-310). Чтобы добиться такого формата: Monday, April 8, 2019
вы должны отформатировать дату следующим образом (источник):
SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
myDate.setText(mDateFormat.format(convertedDate));
Удачи
Я бы сделал что-то вроде этого:
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
Calendar mDate = Calendar.getInstance();
mDate.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
myDate.setText(mDateFormat.format(mDate.getTime()));
}