2014-09-17 24 views
11

Trong Java 8, tôi muốn chuyển đổi ngày giờ từ UTC sang ACST (UTC + 9: 30).Chuyển đổi múi giờ Java 8

đầu vào -> 2014-09-14T17: 00: 00 + 00: 00

output-> 2014-09-15 02:30:00

String isoDateTime = "2014-09-14T17:00:00+00:00"; 
LocalDateTime fromIsoDate = LocalDateTime.parse(isoDateTime, DateTimeFormatter.ISO_OFFSET_DATE_TIME); 

ZoneOffset offset = ZoneOffset.of("+09:30"); 
OffsetDateTime acst = OffsetDateTime.of(fromIsoDate, offset); 
System.out.println(acst.toString()); // 2014-09-14T17:00+09:30 
System.out.println(acst.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); // 2014-09-14T17:00:00+09:30 

Tại sao bù đắp không được thực hiện ?

Trả lời

17

Hãy thử:

String isoDateTime = "2014-09-14T17:00:00+00:00"; 
ZonedDateTime fromIsoDate = ZonedDateTime.parse(isoDateTime); 
ZoneOffset offset = ZoneOffset.of("+09:30"); 
ZonedDateTime acst = fromIsoDate.withZoneSameInstant(offset); 

System.out.println("Input: " + fromIsoDate); 
System.out.println("Output: " + acst.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); 

Output:

Input: 2014-09-14T17:00Z 
Output: 2014-09-15T02:30:00+09:30 
1

cải thiện nhẹ vào ở trên. Tránh bù đắp mã hóa cứng. Ngoài ra, chăm sóc tiết kiệm ánh sáng ban ngày.

public static LocalDateTime convertTo(LocalDateTime dateTime, String timeZone) { 
    ZoneId zone = ZoneId.of(timeZone); 
    ZonedDateTime zdt = dateTime.atZone(zone); 
    ZoneOffset offset = zdt.getOffset(); 
    return dateTime.plus(offset.getTotalSeconds(), ChronoUnit.SECONDS); 
} 
+2

Đây là mẫu chống, bạn không nên trả về "Giờ địa phương" sau khi chuyển múi giờ. – Naufal

Các vấn đề liên quan