Форматирование даты календаря
Я хочу, чтобы дата отображалась так:
Saturday, May 26, 2012 at 10:42 PM
Здесь мой код:
Calendar calendar = Calendar.getInstance();
String theDate = calendar.get(Calendar.MONTH) + " " + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.YEAR);
lastclick.setText(getString(R.string.lastclick) + " " + theDate);
Это показывает числа месяца, дня и года, но лучше ли это сделать? Не существует ли простой способ сделать это, например, с помощью функции PHP date()
?
Ответы
Ответ 1
Используйте ниже, чтобы отформатировать дату по мере необходимости. Обратитесь к LINK
Calendar calendar = Calendar.getInstance();
lastclick.setText(getString(R.string.lastclick) + " " + String.format("%1$tA %1$tb %1$td %1$tY at %1$tI:%1$tM %1$Tp", calendar));
Где% 1 $tA для staurday,
% 1 $tb за май,
и т.д.
Ответ 2
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM d, yyyy 'at' h:mm a");
System.out.println(format.format(calendar.getTime()));
Запуск вышеуказанного кода выводит текущее время (например, Saturday, May 26, 2012 at 11:03 PM
).
Дополнительную информацию см. в документации для Android для SimpleDateFormat
.
Спецификация формата SimpleDateFormat
аналогична спецификации PHP date
:
echo date("l, M j, Y \a\\t g:i A");
Ты прав. По сравнению с Java-кодом PHP-код намного более краткий.
Ответ 3
На самом деле это довольно тонкая проблема, чтобы получить право, и я не видел другого ответа здесь, на SO, который обращается к обоим:
- Часовой пояс
Calendar
(что означает, что он может показывать другую дату, чем локальный)
- Устройство
Locale
(которое влияет на "правильный" способ форматирования дат)
Предыдущие ответы на этот вопрос игнорируют локаль, а другие ответы, которые включают преобразование в Date
, игнорируют часовой пояс. Итак, здесь более полное общее решение:
Calendar cal = Calendar.getInstance(); // the value to be formatted
java.text.DateFormat formatter = java.text.DateFormat.getDateInstance(
java.text.DateFormat.LONG); // one of SHORT, MEDIUM, LONG, FULL, or DEFAULT
formatter.setTimeZone(cal.getTimeZone());
String formatted = formatter.format(cal.getTime());
Обратите внимание, что вам нужно использовать java.text.DateFormat
здесь, а не собственный Android (смутно названный) android.text.format.DateFormat
.
Ответ 4
Для меня это прекрасно работает:
val cal = Calendar.getInstance()
val pattern = "EEEE, MMMM d, yyyy 'at' h:mm a"
val primaryLocale = getLocales(resources.configuration).get(0)
val dateFormat = SimpleDateFormat(dateFormatPattern, primaryLocale)
val formatedDate: String = dateFormat.format(cal.time)