【问题标题】:Converting MySql DateTime type into something more friendly将 MySql DateTime 类型转换为更友好的东西
【发布时间】: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的内容了。

【问题讨论】:

    标签: java mysql jsp pojo


    【解决方案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 所说。

        【讨论】:

          猜你喜欢
          • 2012-11-26
          • 2012-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-28
          • 1970-01-01
          相关资源
          最近更新 更多