Преобразование типа MySql DateTime во что-то более дружественное - PullRequest
3 голосов
/ 20 декабря 2008

У меня есть веб-приложение на Java, которое читает базу данных MySql и возвращает поля DateTime. Как лучше всего преобразовать поля DateTime, возвращенные в наборе результатов, во что-то более читаемое?

В настоящее время поля DateTime печатаются как:

2008-12-14 16: 30: 00

но я бы хотел что-то более удобное для пользователя, например:

14 декабря 2008 г. в 16:30

Я заполняю ArrayList этими dateTimes из pojo. Я хотел бы отформатировать их перед добавлением в arrayList, чтобы затем я мог просто напечатать содержимое arrayList в JSP.

Ответы [ 5 ]

5 голосов
/ 20 декабря 2008

Другой вариант - использовать JSTL. Библиотека форматирования позволяет легко отображать дату в любом формате, и она знает i18n. Преимущество заключается в том, что вы можете оставить дату как объект Date и манипулировать ею как таковой, но конвертировать ее только тогда, когда вам нужно отобразить. Тег формата будет выглядеть так:

<fmt:formatDate value="${myDate}" dateStyle="MEDIUM"/>

Как я уже говорил выше, одним большим преимуществом является то, что он поддерживает i18n, поэтому вы можете отображать дату в локализованном формате.

Полный синтаксис:

 <fmt:formatDate value="expression" 
     timeZone="expression"
     type="field" dateStyle="style" 
     timeStyle="style"
     pattern="expression"
     var="name" scope="scope"/>
3 голосов
/ 20 декабря 2008

Mysql date_format ()

mysql> select date_format(now(),'%d %b %Y at %H:%i') as formated_date;
+----------------------+
| formated_date        |
+----------------------+
| 20 Dec 2008 at 10:56 | 
+----------------------+
1 голос
/ 18 января 2010

Я бы предпочел использовать simpleDateFormat в коде Java, чтобы мой код не был привязан к какой-либо функции базы данных (я знаю слабая причина).

    Date date = ...
    DateFormat df = new SimpleDateFormat("dd MMM yyyy 'at' HH:mm");  // Locale?
    String text = df.format(date);

Имейте в виду, что SimpleDateFormat не является потокобезопасным. Из документации:

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

0 голосов
/ 18 января 2010

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

Если вы все равно хотите отформатировать его и поместить строки в список, используйте java.text.SimpleDateFormat, как говорит Карлос Хойбергер.

0 голосов
/ 20 декабря 2008

Какой уровень абстракции у вас есть над базой данных? Это выглядит как простой случай создания подкласса того, что вы используете в качестве класса поля, и добавления метода для вашего формата.

...