Как я могу установить глобальный формат даты по умолчанию в Java? - PullRequest
1 голос
/ 21 июля 2011

Есть ли способ установить класс DateFormat по умолчанию, используемый для разбора строк на даты?

Мой фон: я получаю исключения, считывающие значения даты из JDBC, потому что строка даты не в ожидаемом формате.

(текст добавлен в 2011-07-22):

Кажется, мне нужно уточнить описание моего вопроса: я использую стороннюю проприетарную базу данных вместе с проприетарным драйвером JDBC. Нет возможности узнать или даже изменить тип столбца на стороне базы данных. Когда я пытаюсь прочитать столбцы ResultSet с помощью ResultSet.getDate () или ResultSet.getObject (), в драйвере JDBC возникает какое-то исключение, например «10 июля 1999 года не является допустимой датой». Чего я хочу добиться, так это избежать этого внутреннего исключения, установив подходящий формат даты по умолчанию. Может быть, мне нужно было бы сначала реализовать какую-нибудь пользовательскую локаль и установить ее глобально?

Ответы [ 2 ]

5 голосов
/ 21 июля 2011

В этом не должно быть никакой необходимости.

Даты должны храниться в БД в виде поля DATE, DATETIME или TIMESTAMP, в зависимости от используемой БД и информации, которую вы хотитенравится хранить (например, только дата или дата и время вместе), а не как VARCHAR или что-то.Такое поле для конкретной даты хранит значение под обложками в основном как целое / длинное с временем эпохи в качестве значения.

Предполагается, что вы используете тип поля даты + время, например DATETIME или TIMESTAMP, тогда вы должны сохранить его в БД, используя PreparedStatement#setTimestamp().Вот пример, предполагая, что переменная date имеет тип java.util.Date:

preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));

И вы должны извлечь их из БД, используя ResultSet#getTimestamp(), который возвращает Timestamp, который, в свою очередь, является подклассом java.util.Date, так что вы можете просто безопасно выгружать его:

Date date = resultSet.getTimestamp("columnname");

Что касается разбора / форматирования java.util.Date объект из / в читаемый человеком формат String, технически это должно происходить на стороне вида, а не на уровне постоянства.Как именно это сделать, в свою очередь, зависит от используемой технологии / инфраструктуры представления / пользовательского интерфейса, таких как Swing, JSP, JSF, Struts2, Spring-MVC и так далее.Поскольку из вашего вопроса не ясно, какой из них вы используете, невозможно дать подходящий ответ.Как правило, все они используют SimpleDateFormat API под крышками.Вы даже можете использовать его в необработанном виде.

4 голосов
/ 21 июля 2011

Вы можете установить локаль по умолчанию:

Locale.setDefault(Locale.US);

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

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