Подтвердить что ты не робот

Форматирование даты календаря

Я хочу, чтобы дата отображалась так:

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()?

4b9b3361

Ответ 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)