【问题标题】:How can I convert java.util.Date to org.joda.time.DateTime?如何将 java.util.Date 转换为 org.joda.time.DateTime?
【发布时间】:2012-01-02 10:18:48
【问题描述】:

我必须使用 java.util.Date 类作为表中的字段类型。 但是我想在 joda time 的帮助下更改日期字段的显示格式(舒适,首选使用),这就是我想将 Date 转换为 DateTime 的原因。

我知道我监督了一些事情,因为在 stackoverflow 中没有这样的问题 :) 但我在 DateTime 构造函数等中找不到解决方案。 反向转换DateTime.toDate(); 存在,但相反的方式呢?

提前感谢您的回答。

Cs

【问题讨论】:

  • 好的,它可以工作,谢谢,但是根据 api 没有这样的构造函数接受 Date ...再次感谢,也许我误解了一些东西。

标签: datetime date vaadin


【解决方案1】:

在 Vaadin 中,如果您想在没有 joda 的情况下更改表格中的显示格式,只需覆盖方法 protected String formatPropertyValue(Object rowId, Object colId, Property property)

这里有一个例子:

Table t = new Table() {

        @Override
        protected String formatPropertyValue(Object rowId, Object colId,
                Property property) {
            Object v = property.getValue();
            if (v instanceof Date) {
                Date dateValue = (Date) v;
                return new SimpleDateFormat("yyyy-MMMM-dd").format(dateValue);
            }
            return super.formatPropertyValue(rowId, colId, property);
        }

    };

问候

埃里克

【讨论】:

  • 感谢 Eric,但有这么多人喜欢 jodatime,这就是我想了解一下的原因。但我感谢你的努力。
【解决方案2】:

是的,使用 Joda-Time

一定要在 Java 8 中使用 Joda-Timejava.time package(受 Joda-Time 启发)。旧的 java.util.Datejava.util.Calendar 类出了名的麻烦、混乱和过时。

另外,请阅读 UTCISO 8601 上的维基百科页面。

是的,将日期传递给 Joda-Time 构造函数

➔ 确实,您可以java.util.Date 对象传递给Joda-Time DateTime 对象的constructor

API 文档有点混乱,因为这显然属于采用java.lang.Object 实例的构造函数的包罗万象的版本。如果该对象实际上是一个java.util.Date,Joda-Time 将提取其毫秒计数-epoch 并将该数字用作自己的数字。

时区

DateTime 构造函数还分配了一个时区。默认情况下,会分配 JVM 当前的默认时区。我建议您始终传递所需的时区,而不是隐式依赖默认时区,即使这意味着调用 getDefault

示例代码

这里是 Joda-Time 2.5 中的一些示例代码,展示了如何将 java.util.Date 传递给 Joda-Time 构造函数。

java.util.Date date = new java.util.Date();
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTimeMontreal = new DateTime( date , zone );
DateTime dateTimeUtc = dateTimeMontreal.withZone( DateTimeZone.UTC ); // Adjust to another time zone.

转储到控制台。

System.out.println( "date: " + date ); // Misleading output. A j.u.Date is in UTC but its toString method applies JVM’s current default time zone.
System.out.println( "dateTimeMontreal: " + dateTimeMontreal );
System.out.println( "dateTimeUtc: " + dateTimeUtc );

运行时。

date: Sat Oct 18 18:54:55 PDT 2014
dateTimeMontreal: 2014-10-18T21:54:55.740-04:00
dateTimeUtc: 2014-10-19T01:54:55.740Z

如问题所示,要从 DateTime 转到 java.util.Date,请调用 toDate

java.util.Date date = dateTimeMontreal.toDate();

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2019-10-20
    • 2015-05-06
    • 2021-02-25
    • 2014-08-25
    • 2011-08-01
    • 2014-02-10
    • 2011-08-29
    • 2019-08-03
    相关资源
    最近更新 更多