Я хотел бы установить часовой пояс на константу DateTime.
Например:
DateTime currentTime = new DateTime(2015, 1, 23, 2, 0); // CONSTANT
// Looking for something that can perform this type of method.
currentTime.setTimeZone(DateTimeZone.forID("Asia/Tokyo"));
System.out.println("Asia/Tokyo Time" + currentTime);
currentTime.setTimeZone(DateTimeZone.forID("America/Montreal")
System.out.println("America/Montreal Time" + currentTime);
Как я смогу это сделать, используя API-интерфейс Joda.
Предполагая, что вы хотите "в тот же миг, только в другом часовом поясе", тогда вы хотите withZone
.
Это не setZone
, потому что DateTime
(как и многие типы в Joda Time) неизменен. Вместо этого вы используете withZone
и используете результат. Например:
DateTime currentTime = new DateTime(2015, 1, 23, 2, 0, 0, DateTimeZone.UTC);
DateTime tokyo = currentTime.withZone(DateTimeZone.forID("Asia/Tokyo"));
System.out.println("Asia/Tokyo Time" + tokyo);
Вывод:
Asia/Tokyo Time2015-01-23T11:00:00.000+09:00
Обратите внимание: если вы не укажете часовой пояс при построении DateTime
, он будет использовать часовой пояс системы по умолчанию, что редко бывает хорошей идеей. (Как отмечается в комментариях, если вы пишете код клиента, может быть, что вы хотите часовой пояс системы по умолчанию - но я рассматриваю его как наилучшую практику, чтобы указать это явно, так что это действительно ясно для всех, кто может рассмотреть возможность использования кода в другом контексте.)
Глядя на вашу реализацию, вы хотите заставить DateTime вести себя как Календарь. Поскольку Calendar изменен, а DateTime - нет, почему бы не использовать MutableDateTime - измененную версию DateTime. Смотрите мой код ниже:
//this is the mutable version of DateTime, set to UTC as default
MutableDateTime currentTime = new DateTime(2015, 1, 23, 2, 0, DateTimeZone.UTC).toMutableDateTime(); // CONSTANT
// Looking for something that can perform this type of method.
currentTime.setZone(DateTimeZone.forID("Asia/Tokyo"));
System.out.println("Asia/Tokyo Time : " + currentTime);
currentTime.setZone(DateTimeZone.forID("America/Montreal"));
System.out.println("America/Montreal Time : " + currentTime);
//if you want to return a value in DateTime datatype
currentTime.toDateTime();
Надеюсь, это работает для вас. Не унывайте!