我有一个Java Web应用程序,它读取MySql数据库并返回DateTime字段。将结果集中返回的DateTime字段转换为更具可读性的最佳方法是什么?
目前,DateTime字段打印为:
2008-12-14 16:30:00
但我想要一些更友好的用户:
2008年12月14日16:30
我使用pojo中的这些dateTimes填充ArrayList。我想在添加到arrayList之前格式化它们,这样我就可以在JSP中打印arrayList的内容。
答案 0 :(得分:5)
另一种选择是使用JSTL。格式化库可以轻松地以任何格式显示日期,并且可以识别它。优点是您可以将日期保留为Date对象并对其进行操作,但仅在需要显示时进行转换。格式标记如下所示:
<fmt:formatDate value="${myDate}" dateStyle="MEDIUM"/>
就像我上面说的那样,一个很大的优点是它可以让我知道,所以你可以用本地化的格式显示日期。
完整语法为:
<fmt:formatDate value="expression"
timeZone="expression"
type="field" dateStyle="style"
timeStyle="style"
pattern="expression"
var="name" scope="scope"/>
答案 1 :(得分:3)
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 |
+----------------------+
答案 2 :(得分:1)
我更喜欢在Java代码中使用simpleDateFormat
,因此我的代码不会绑定到任何数据库函数(我知道这个理由不充分)。
Date date = ...
DateFormat df = new SimpleDateFormat("dd MMM yyyy 'at' HH:mm"); // Locale?
String text = df.format(date);
警告SimpleDateFormat
不是线程安全的。来自文档:
日期格式未同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问格式,则必须在外部进行同步。
答案 3 :(得分:0)
你对数据库有什么样的抽象层?它看起来像是一个简单的子类化的例子,你正在使用它作为字段类,并为你的格式添加一个方法。
答案 4 :(得分:0)
我建议使用标记格式化选项,因为您拥有真实数据(日期/时间),并且您在页面级别格式化格式是相关的(并且您知道..例如,要应用的语言环境)。
如果你想要格式化它并将字符串放入List中,请使用java.text.SimpleDateFormat
,如Carlos Heuberger所说。