Как свойства даты должны быть определены в классе Java? - PullRequest
1 голос
/ 08 марта 2011

У меня есть простой объект Java с несколькими свойствами даты, и я, кажется, всегда передумал, как их определить.Должны ли свойства быть определены как объекты даты или строки?Объект будет использоваться в приложении Struts 1.3 с iBatis в качестве слоя персистентности и mysql в качестве базы данных.Столбцы базы данных определены как datetime, и они могут быть нулевыми, и я обычно не забочусь о временной части.использует строки, но это просто не кажется мне правильным.

Ответы [ 5 ]

6 голосов
/ 08 марта 2011

Сохраните ваши даты как Date с.Таким образом, вы можете изменять форматирование в зависимости от локали, проверять наличие недопустимых дат, сортировать их и т. Д.

Сохраняя их в виде строк, вы потенциально выбрасываете данные (например, в миллисекундах, если ваш форматтер их не использует)и определенно поведение.

Использование строгой типизации (например, сохранение их как Date s) поможет с точки зрения развития.Сигнатуры ваших методов становятся более четкими, рефакторинг с использованием инструментов IDE становится проще и т. Д. В противном случае вы получите API-интерфейсы, которые говорят не более чем в строках, тривиально смешать параметры, и становится невозможным понять, что происходит.

Подсказка: посмотрите Joda-Time как лучшую альтернативу стандартному java.util.Date.

1 голос
/ 08 марта 2011

В моем коде я всегда использую объект самого высокого уровня. В этом случае я бы предложил - Календарь. Здесь отдельное обсуждение о Дата и Календарь . Я всегда так думаю - конвертировать Calendar / Date в String просто - используйте SimpleDateFormatter. Но очень часто вам нужно будет что-то делать с датой (добавить несколько дней или часов, вычесть год, обработать часовые пояса и т. Д.), А затем каждый раз, когда вам придется преобразовывать ее из строки в календарь / дату.

1 голос
/ 08 марта 2011

Я бы никогда не использовал Strings в этом казино, как сегодня, 8/3/11, 3/8/11 или 2011-03-08. Это действительно конкретный случай попытки использовать наиболее ограниченный тип / класс, возможный для переменной. Это сделано для того, чтобы вы могли более полно понять его поведение как с помощью ограниченного или специализированного набора методов, так и с помощью документации других классов, использующих его. Использование даты здесь позволит вам использовать объект календаря для добавления дней или месяцев. Преобразование в или из строки необходимо выполнять только для ввода и вывода.

На практике, если бы это были только даты, я бы создал свой собственный класс Date, поэтому мог бы игнорировать время или использовать JodaTime , который обеспечивает более легкое манипулирование, чем Java Date

1 голос
/ 08 марта 2011

Я бы использовал объект Date, потому что он чище для хранения Date и преобразования его в String при необходимости.В противном случае вам придется жестко закодировать форматированную дату в поле String.

0 голосов
/ 08 марта 2011

Дата, если вам нужно, но java.util.Calendar, вероятно, будет более подходящим в настоящее время. Со строкой вам придется беспокоиться о формате, как упомянуто @jzd. С Календарем вы можете легко переключаться между форматами. Также Календарь позволяет вам получить дату с помощью Calendar.getTime ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...