2012-01-02 8 views
1

Я должен использовать класс java.util.Date как тип поля в таблице. Но я хотел бы изменить формат отображения поля даты с помощью joda time (confortable, предпочитаемый для использования), вот почему я хочу конвертировать Date в DateTime.Как преобразовать java.util.Date в org.joda.time.DateTime?

Я знаю, что я что-то наблюдаю, потому что в stackoverflow нет такого вопроса :), но я не мог найти душевное состояние среди конструкторов DateTime и так далее. Обратное преобразование DateTime.toDate(); Существует, но как насчет обратного пути?

Спасибо за ответы заранее.

Cs

+0

возможное дублирование http://stackoverflow.com/questions/5042587/convert-from-java-util-date-to-jodatime – Xorty

+0

Хорошо, это работает, спасибо, но по апи нет такого конструктор, который принимает дату ... Еще раз спасибо, может быть, я что-то неправильно понял. – cscsaba

+0

Добро пожаловать :) – Xorty

ответ

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

    }; 

С уважением

Éric

+0

Спасибо Эрик, но так много людей призывают jodatime, поэтому я хотел бы немного это узнать. Но я ценю ваши усилия. – cscsaba

0

Да, Использовать Joda-Time

Определенно используйте Joda-Time или java.time package на Java 8 (вдохновленный Joda-Time). Старые классы java.util.Date и java.util.Calendar, как известно, являются неприятными, запутанными и устаревшими.

Также читайте на страницах Википедии UTC и ISO 8601.

Да, Pass Дата Для Joda-Time Конструктора

➔ Да, действительно, вы можете передать java.util.Date объект в constructor в виде Joda-Time DateTime объекта.

Документ 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(); 
Смежные вопросы