Ответ 1
Несколько точек:
- Вам не нужно вызывать
System.currentTimeMillis()
. Просто передайте это:
DateTime utc = new DateTime(DateTimeZone.UTC);
-
Когда вы вызываете
.getMillis()
, результат всегда находится в UTC. Представление времени как целого, не являющегося основанием для UTC, является плохой идеей, а не тем, что предоставит Joda Time. Ваша оценка того, что миллисекунды затронуты вашим местным часовым поясом, неверна. -
Ошибки преобразования связаны с тем, как вы вызываете
format.print
. Когда вы передаете целое число, поведение по умолчанию заключается в использовании текущего часового пояса, которое является вашим местным временем. Вы можете изменить его следующим образом:
format.withZone(DateTimeZone.UTC).print(current)
- Однако, если намерение состоит в том, чтобы печатать его как строку даты, зачем вообще начинать миллисекунды? Если вы передадите оригинал
DateTime
, тогда его информация о часовом поясе будет применена автоматически.
format.print(utc)
format.print(local)
Объединив, все это будет выглядеть так:
DateTime local = new DateTime();
DateTime utc = new DateTime(DateTimeZone.UTC);
System.out.println("local zone = " + local.getZone());
System.out.println(" utc zone = " + utc.getZone());
DateTimeFormatter format = DateTimeFormat.mediumDateTime();
System.out.println(" local: " + format.print(local));
System.out.println(" utc: " + format.print(utc));
System.out.println("millis: " + utc.getMillis());