2016-04-12 6 views
0

Я использую Java 8 и пытаюсь преобразовать временную метку из одного часового пояса в другой. Временная метка будет находиться в часовом поясе пользователя, например.Преобразование даты с одного часового пояса в местный часовой пояс

// 2016-04-11T12:00:00Z 
long sourceTime = 1460372400000L; 
timezoneConverter(sourceTime, "America/New_York"); 

Однако при использовании Joda времени, или Java 8 LocalDateTime/Мгновенные, когда я прохожу метку времени она устанавливается в часовом поясе пользователя - мне не нужно, чтобы это произошло, как это уже в часовой пояс пользователя (все временные метки будут отправляться в локальное время пользователя).

ZonedDateTime zdt = 
    ZonedDateTime.ofInstant(Instant.ofEpochMilli(1460372400000L), 
          ZoneId.of("America/New_York")) 

приводит

2016-04-11T07:00-04:00[America/New_York] 

вместо

2016-04-11T12:00-04:00[America/New_York] 

Есть ли способ обойти это?

Спасибо!

+0

Я боюсь ваше утверждение "это временная метка из пользовательского t ime zone ". указывает на непонимание значения временных меток, таких как '1460372400000L'. Такие глобальные временные метки не связаны ни с одним часовым поясом, а только с UTC + 00: 00. –

ответ

1

1460372400000L является Mon, 11 Apr 2016 11:00:00 GMT или Mon, 11 Apr 2016 12:00:00 BST

2016-04-11T11:00:00Z является 2016-04-11T07:00-04:00[America/New_York] так что вы переходите из одного часового пояса в другой.

Если вы просто хотите, местный часовой пояс, я предлагаю вам использовать LocalDateTime

LocalDateTime dt = LocalDateTime.ofEpochSecond(1460376000L, 0 , ZoneOffset.ofHours(0)); 
System.out.println(dt); 

отпечатки

2016-04-11T12:00 
+0

Временная метка не должна корректироваться в моем случае - это отметка времени из часового пояса пользователя. – KingTravisG

+0

@ StephenWithAPh1986 это то, что для 'LocalDateTime' для. DateTime без часового пояса. –

0
long sourceTime = 1460372400000L; 
//Select your timezone 
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC"); 
Calendar calendar = new GregorianCalendar(utcTimeZone); 
calendar.setTimeInMillis(sourceTime); 

// Получаем Current Time Zone

LocalTime time = LocalTime.now(); 
System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString()); 
System.out.println("Current local time : " + time); 
Смежные вопросы