Как мне создать DateFormat с необязательным аргументом времени? - PullRequest
5 голосов
/ 23 декабря 2010

Я хочу создать формат даты, который может иметь аргумент времени.

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd [hh:mm]");

Можно ли также создать объект формата даты, который может анализировать различные форматы?Например, попробуйте текущую локаль, но затем вернитесь к ISO-8601, или я должен просто написать несколько форматов даты в случае сбоя?

ОБНОВЛЕНИЕ : Оглядываясь назад на этот вопрос, я вижу, что не сделалне указывайте, что причиной нескольких форматов даты был синтаксический анализ строк, а не форматирование даты, поэтому неоднозначность форматирования объектов даты меня не беспокоила.Если принять это во внимание, часть времени включена или не включена в строку синтаксического анализа.

1 Ответ

4 голосов
/ 23 декабря 2010

SimpleDateFormat не позволит вам сделать это. Он не поддерживает альтернативы в (одном) формате.

Даже если бы это произошло, возникла бы проблема. Подумайте об этом

new SimpleDateFormat("yyyy-MM-dd [hh:mm]");

против использования

new SimpleDateFormat("yyyy-MM-dd hh:mm");
new SimpleDateFormat("yyyy-MM-dd ");

В первом случае, когда я анализировал дату по формату, я не мог определить разницу между "2010-01-01" и "2010-01-01 00:00", посмотрев на Date доставлено мне. Во втором случае я могу.

В первом случае, когда я форматирую дату с нулем в полях минут и секунд, неясно, должен ли результат заканчиваться на «00:00» ... или нет. Во втором случае это полностью в руках приложения.

Полагаю, что здесь я действительно поднимаю вопрос о том, что даты и дата / время означают разные вещи для разных людей и в разных контекстах. Иногда они означают моменты, а иногда интервалы. Иногда отсутствие выраженной точности означает неточность, а иногда и то, что подразумевается точность.

Как разработчики, мы должны провести грань между написанием раздражающе разборчивого программного обеспечения и программного обеспечения, которое делает неверные предположения о том, что на самом деле означает пользователь под значением даты / времени. Первым шагом к тому, чтобы сделать его правильным для пользователя, является понимание сложности проблемы. Перегрузка вариаций в одну строку формата (будет) приведет к решению проблемы.

...