如何将java.util.Date转换为org.joda.time.DateTime?

时间:2012-01-02 10:18:48

标签: datetime date vaadin

我必须在表中使用java.util.Date类作为字段类型。 但我想借助joda时间(舒适,优先使用)来更改日期字段的显示格式,这就是为什么我要将Date转换为DateTime。

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

提前感谢您的答案。

2 个答案:

答案 0 :(得分: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);
        }

    };

此致

埃里克

答案 1 :(得分:0)

是的,使用Joda-Time

绝对使用Java 8中的Joda-Timejava.time package(受Joda-Time启发)。旧的java.util.Datejava.util.Calendar类是出了名的麻烦,令人困惑和过时。

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

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

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

API文档有点令人困惑,因为这显然属于构建者采用java.lang.Object实例的全能版本。如果该对象实际上是java.util.Date,那么Joda-Time将提取其毫秒计数 - { - 3}}并将该数字用作自己的数字。

时区

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();