Как заставить dateformat использовать месяц и день
У меня есть такие строки в моем strings.xml:
<string name="day_format">EEEE</string>
<string name="date_format">dd. MMMM</string>
<string name="date_format_us">MMMM dd</string>
И я использую их так в коде:
private void reinit() {
mDayFormat = getString(R.string.day_format);
if (!DateFormat.is24HourFormat(this))
{
mDateFormat = getString(R.string.date_format_us);
}
else {
mDateFormat = getString(R.string.date_format);
}
mTimeFormat = is24HourMode(this) ? FORMAT_24_HOURS : FORMAT_12_HOURS;
mCalendar = Calendar.getInstance();
}
Но он отображает день и месяц в нижнем регистре, и я хочу, чтобы они были в обоих. Как я могу этого достичь?
3 ответа
Я исправил это так:
final CharSequence date = DateFormat.format(mDateFormat, mCalendar);
final CharSequence day = DateFormat.format(mDayFormat, mCalendar);
String time = (String) DateFormat.format(mTimeFormat, mCalendar);
RemoteViews views = new RemoteViews(getPackageName(), R.layout.clock2by2);
String days = new String(day.toString().substring(0,1).toUpperCase() + day.toString().substring(1));
String dates = new String(date.toString().substring(0,1).toUpperCase() + date.toString().substring(1));
views.setTextViewText(R.id.Day, days);
views.setTextViewText(R.id.Date, dates);
views.setImageViewBitmap(R.id.TimeView, buildUpdate(time));
Ты можешь использовать WordUtils.capitalize(..)
из commons-lang (в строке результата)
(это в том случае, если вы хотите использовать заглавные буквы - то есть заглавные буквы только первой буквы. В противном случае вы можете использовать просто .toUpperCase()
)
Обновление: так как кажется, что это Android, вы можете открыть источники WordUtils
и скопировать реализацию оттуда, а не получить всю библиотеку.
Есть более точный способ сделать это. Вы можете управлять каждой частью вашего средства форматирования, используя DateFormatSymbols.
Посмотри на это, это красиво:
Scanner s = new Scanner(System.in);
SimpleDateFormat simpleDateFormatFrom = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat simpleDateFormatTo = new SimpleDateFormat("MMM dd, yyyy");
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols();
String[] months = simpleDateFormatTo.getDateFormatSymbols().getShortMonths();
for (int i = 0; i < months.length; i++) {
months[i] = months[i].toUpperCase();
}
dateFormatSymbols.setShortMonths(months);
simpleDateFormatTo.setDateFormatSymbols(dateFormatSymbols);
Date date = simpleDateFormatFrom.parse(s.next());
System.out.println(simpleDateFormatTo.format(date));