将 MySql DateTime 类型转换为更友好的东西
Posted
技术标签:
【中文标题】将 MySql DateTime 类型转换为更友好的东西【英文标题】:Converting MySql DateTime type into something more friendly 【发布时间】:2010-09-27 20:52:48 【问题描述】:我有一个读取 mysql 数据库并返回 DateTime 字段的 Java Web 应用程序。将结果集中返回的 DateTime 字段转换为更具可读性的最佳方法是什么?
当前日期时间字段打印为:
2008-12-14 16:30:00
但我想要一些更用户友好的东西,例如:
2008 年 12 月 14 日 16:30
我正在用来自 pojo 的这些 dateTimes 填充一个 ArrayList。我想在添加到arrayList之前对其进行格式化,这样我就可以在JSP中打印arrayList的内容了。
【问题讨论】:
【参考方案1】:另一个选择是使用 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"/>
【讨论】:
【参考方案2】:Mysqldate_format()
mysql> select date_format(now(),'%d %b %Y at %H:%i') as formated_date;
+----------------------+
| formated_date |
+----------------------+
| 20 Dec 2008 at 10:56 |
+----------------------+
【讨论】:
噢!我认为这完美地回答了我刚刚发布的问题。应该先读到这个。没有意识到我可以让 mysql 为我格式化日期。谢谢。 这不是正确的方法。您应该为此使用 JSTLfmt:formatDate
。这样你就可以一直在 Java 代码中保留一个有价值的 Date
对象。
您在持久性级别进行格式化,这不是一个好习惯。尝试将日期时间本身发送到 UI 并在那里格式化!【参考方案3】:
我更愿意在 Java 代码中使用 simpleDateFormat
,这样我的代码就不会绑定到任何数据库函数(我知道这很弱)。
Date date = ...
DateFormat df = new SimpleDateFormat("dd MMM yyyy 'at' HH:mm"); // Locale?
String text = df.format(date);
请注意SimpleDateFormat
不是线程安全的。来自文档:
日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一个格式,它必须在外部同步。
【讨论】:
他正在使用 JSP。 Vincent Ramdhanie 提到的fmt:formatDate
是唯一正确的方法。顺便说一句,SimpleDateFormat
已经支持它,并且已经自动将语言环境考虑在内。为此重读他的答案。
@BalusC 据我了解,他想在添加到列表之前进行格式化。 --ups-- 刚才我看到这个问题已经很老了......【参考方案4】:
您对数据库有什么样的抽象层?它看起来像是一个简单的案例,将您用作字段类的任何内容子类化,并为您的格式添加一个方法。
【讨论】:
【参考方案5】:我建议您使用标签格式化选项,因为您拥有真实数据(日期/时间),并且您可以在与格式相关的页面级别进行格式化(并且您知道......例如,要应用的区域设置)。
如果您仍然想格式化它并将字符串放入列表中,请使用 java.text.SimpleDateFormat
,正如 Carlos Heuberger 所说。
【讨论】:
以上是关于将 MySql DateTime 类型转换为更友好的东西的主要内容,如果未能解决你的问题,请参考以下文章
将 SQL Server DATETIMEOFFSET 转换为 mySQL DateTime