将 MySql DateTime 类型转换为更友好的类型

发布于 2024-07-11 05:34:09 字数 313 浏览 7 评论 0原文

我有一个 Java Web 应用程序,它读取 MySql 数据库并返回 DateTime 字段。 将结果集中返回的日期时间字段转换为更具可读性的内容的最佳方法是什么?

目前,DateTime 字段打印为:

2008-12-14 16:30:00

,但我想要一些更用户友好的内容,例如:

2008 年 12 月 14 日 16:30

我正在使用 pojo 中的这些日期时间填充 ArrayList。 我想在添加到 arrayList 之前对它们进行格式化,这样我就可以在 JSP 中打印 arrayList 的内容。

I have a Java web app that reads a MySql db and returns DateTime fields. What is the best way to convert the DateTime fields returned in the resultset into something more readable?

Currently the DateTime fields print as:

2008-12-14 16:30:00

but I would like something more user friendly like:

14 Dec 2008 at 16:30

I am populating an ArrayList with these dateTimes from a pojo. I would like to format them before adding to the arrayList, so then I can just print the contents of the arrayList in the JSP.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

南…巷孤猫 2024-07-18 05:34:09

另一种选择是使用 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"/>

Another option is to use the JSTL. The formatting library makes it easy to display a date in any format and it is i18n aware. The advantage is that you can leave the date as a Date object and manipulate it as such but only convert it when you need to display. The format tag will look like this:

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

Like I said above, one big advantage is that it is i18n aware so you can display the date in a localized format.

The full syntax is:

 <fmt:formatDate value="expression" 
     timeZone="expression"
     type="field" dateStyle="style" 
     timeStyle="style"
     pattern="expression"
     var="name" scope="scope"/>
计㈡愣 2024-07-18 05:34:09

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 | 
+----------------------+

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 | 
+----------------------+
弃爱 2024-07-18 05:34:09

我更愿意在 Java 代码中使用 simpleDateFormat,这样我的代码就不会绑定到任何数据库函数(我知道,原因很弱)。

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

请注意,SimpleDateFormat 不是线程安全的。 从文档中:

日期格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问某种格式,则必须进行外部同步。

I would prefer to use a simpleDateFormat in the Java code so my code is not bound to any database function (weak reason, I know).

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

Be warned that SimpleDateFormat is not thread safe. From the documentation:

Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.

虐人心 2024-07-18 05:34:09

数据库有什么样的抽象层? 它看起来像是一个简单的例子,对您用作字段类的任何内容进行子类化,并为您的格式添加一个方法。

What kind of abstraction layer do you have over the database? It looks like a simple case of subclassing whatever you're using as the field class, and adding a method for your format.

随风而去 2024-07-18 05:34:09

我推荐标签格式化选项,因为您拥有真实的数据(日期/时间),并且您在格式相关的页面级别进行格式化(并且您知道......例如,要应用的区域设置)。

如果您无论如何想格式化它并将字符串放入列表中,请使用 java.text.SimpleDateFormat 正如 Carlos Heuberger 所说。

I'd recommend the tag formatting option, because you have the real data (dates/times) and you format at page level where format is relevant (and you know.. by example, locale to apply).

If you anyway want to format it and put the strings into a List use java.text.SimpleDateFormat as Carlos Heuberger says.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文