Да, используйте 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();