将 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 为我格式化日期。谢谢。 这不是正确的方法。您应该为此使用 JSTL fmt: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 类型转换为更友好的东西的主要内容,如果未能解决你的问题,请参考以下文章

PHP 将MySql DATETIME更改为更友好的内容

MySQL:将 INT 转换为 DATETIME

将 SQL Server DATETIMEOFFSET 转换为 mySQL DateTime

无法将 MySQL 日期/时间值转换为 System.DateTime

将mysql DATETIME列转换为纪元秒

怎么样将java中的date类型插入到mysql的datetime