Форматирование даты на Java - PullRequest
1 голос
/ 18 декабря 2009

У меня есть строка в следующем формате: январь_2005 (МММММММ_гггг)

и я хочу преобразовать его в допустимое значение даты mysql, чтобы вставить его в базу данных.

Мне нужно сделать это на Java.

Кто-нибудь знает, как это сделать?

Спасибо

Ответы [ 7 ]

3 голосов
/ 18 декабря 2009

Согласно SimpleDateFormat API шаблон на самом деле MMMM_yyyy.

Итак, чтобы получить достойное java.util.Date из этого String, вам нужно сделать следующее:

String stringDate = "january_2005";
Date date = new SimpleDateFormat("MMMM_yyyy").parse(stringDate);

Если предполагается, что эти месяцы будут всегда английскими, а Locale компьютера, на котором он работает, не является (всегда) английским, то вам лучше указать также Locale:

Date date = new SimpleDateFormat("MMMM_yyyy", new Locale("en")).parse(stringDate);

Чтобы сохранить его в базе данных, используйте PreparedStatement#setDate(). Сначала вам нужно конвертировать java.util.Date в java.sql.Date.

preparedStatement = connection.prepareStatement("INSERT INTO mytable (somedate) VALUES (?)";
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
1 голос
/ 18 декабря 2009

Сначала проанализируйте дату в объекте Date, используя SimpleDateFormat:

 Date d=  new SimpleDateFormat("MMMM_yyyy").parse(s)

Затем вставьте дату с помощью параметризованного SQL (PreparedStatement):

public insertData(Date d) {
   Connection conn = setupTheDatabaseConnectionSomehow();
   PreparedStatement stmt = 
     conn.prepareStatement("INSERT INTO t (date) values (?)");
   stmt.setDate(2, new java.sql.Date(d));
   stmt.executeUpdate();
}

Знаки вопроса будут автоматически преобразованы в правильный формат для MySQL и сделают ваш код более безопасным и более переносимым. Искать параметризованный SQL для получения дополнительной информации.

1 голос
/ 18 декабря 2009

Что-то вроде этого, вероятно, добьется цели,

SimpleDateFormat myFormat = new SimpleDateFormat("MMMM_yyyy");
Date aDate;
try 
{
    aDate = myFormat.parse("January_2009");
} 
catch (ParseException e) 
{
    // Error handling
}

Затем вы можете вставить aDate в вашу БД, используя PreparedStatement.

Если вы не используете PreparedStatements и нуждаетесь в нем в качестве строки, тогда вы можете просто сделать следующее. Хотя, как упоминалось в комментариях, гораздо безопаснее использовать PreparedStatements для вставки в БД.

SimpleDateFormat sqlFormat = new SimpleDateFormat("yyyy-MM-dd hh:dd:ss");
String sqlDateString = aDate.format(sqlFormat);
0 голосов
/ 18 декабря 2009

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

0 голосов
/ 18 декабря 2009

Я думаю, что-то подобное сделало бы это, используя подготовленное утверждение

DateFormat formatter = new SimpleDateFormat("MMMMMMM_yyyy");
Date mydate = formatter.parse("january_2005");
stmt_date.setTimestamp(4, new Timestamp(mydate.getTime()));
0 голосов
/ 18 декабря 2009

Вы могли бы что-то с SimpleDateFormat вот так получить объект Date:

DateFormat formatter = new SimpleDateFormat("MMMM_yyyy");
Date date = (Date)formatter.parse("January_2009");

Вам может понадобиться прописная буква первой буквы 'января', чтобы заставить это работать (я не уверен, какой диапазон входных данных SimpleDateFormat принимает.

Как только вы получите Date, это зависит от того, как вы храните даты в MySQL, и от того, что делать дальше.

0 голосов
/ 18 декабря 2009

Создайте свой собственный Dateformatter ... и подайте в суд на свой собственный формат даты для решения таких проблем.

DateFormatter

DateFormat

Пожалуйста, отредактируйте ваш вопрос, если возникнут ошибки, связанные с форматированием даты: -)

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