В чем разница между SimpleDateFormat и android.text.format.DateFormat?

Прочитав о них, я понял, что класс android - это служебный класс, созданный только для удобства, и не предоставляет ничего, чего не предоставляет SimpleDateFormat. Есть ли какое-то значение для класса Android? Лучше ли его использовать (если да, то почему)? Моя цель - отобразить объект Date в приложении для Android (очевидно). Вот:

private Date date;

public String getDateString(String formatStr){
    return new SimpleDateFormat(formatStr).format(date);
}

было бы лучше использовать android.text.format.DateFormat следующим образом:

public String getDateString(String formatStr){
    return android.text.format.DateFormat.format(formatStr, date);
}

или, возможно, ни один из двух, но лучше было бы по-другому? заранее спасибо.


person Community    schedule 30.11.2012    source источник


Ответы (2)


Копирование моего ответа с https://stackoverflow.com/a/27116266/642160:

Насколько я могу судить, android.text.format.DateFormat обладает некоторыми функциями из java.text.DateFormat, некоторыми функциями из java.text.SimpleDateFormat и некоторыми собственными дополнительными функциями.

В частности:

  • Java SimpleDateFormat позволяет создавать произвольные нелокализованные форматы.
  • Java DateFormat позволяет создавать три локализованных формата для даты и времени с помощью своих фабричных методов.
  • Android DateFormat допускает большую часть вышеперечисленного (произвольные форматы и меньшее количество локализованных форматов), но также предоставляет getBestDateTimePattern, который выбирает строку формата, соответствующую локали, содержащую элементы, указанные с соответствующими локали порядком и пунктуацией.

Итак, если вам нужен локализованный формат даты/времени, отличный от трех, предоставляемых классом java DateFormat, класс Android DateFormat является решением.

Менее важно, но дополнительное удобство: методы Android DateFormat могут принимать календарь или длинные миллисекунды напрямую, вместо того, чтобы требовать объект Date. Я всегда предпочитаю работать с календарем или долго, а не с датой. Кроме того, он правильно учитывает часовой пояс объекта календаря, тогда как получение даты из календаря и передача ее форматировщику теряет информацию о часовом поясе. (Ничего, что вы не можете обойти с помощью метода setCalendar java DateFormat, но приятно, что это не нужно.)

Наконец, что не менее важно, некоторые методы Android DateFormat на самом деле не создают средство форматирования, вы просто создаете строку формата. Все методы этого класса являются статическими. Методы, которые создают DateFormat, фактически создают java DateFormat!

person benkc    schedule 24.11.2014

Я считаю, что ответ лежит здесь:

Фабричные методы этого класса возвращают соответствующим образом локализованные экземпляры DateFormat, подходящие как для форматирования, так и для анализа дат.

Я не думаю, что SimpleDateFormat обеспечивает правильно локализованные форматы.

person Community    schedule 16.01.2013