Как я могу преобразовать java.util.Date в org.joda.time.DateTime? - PullRequest
1 голос
/ 02 января 2012

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

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

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

Cs

Ответы [ 2 ]

1 голос
/ 02 января 2012

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

    };

Привет

1009 * Éric *

0 голосов
/ 19 октября 2014

Да, используйте Joda-Time

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

Кроме того, прочитайте страницы Википедии на UTC и ISO 8601 .

Да, дата передачи в конструктор Joda-Time

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

Документ API немного сбивает с толку, поскольку он явно попадает в универсальную версию конструктора, принимающую экземпляр java.lang.Object.Если этот объект на самом деле является java.util.Date, Joda-Time извлечет свой счетчик миллисекунд с эпохи и использует это число как свое собственное.

Часовой пояс

*Конструктор 1044 * A 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();
...