2016-09-12 11 views
1

Я форматирую дату UTC, и я хочу, чтобы она отображалась по местному времени. Однако использование withZone(ZoneId.systemDefault()); ничего не делает. Вот код, а значения d и d2 - это то же самое, но я ожидаю, что d2 будет на 6 часов раньше, потому что я в MST.Android DateTimeFormatter withZone не работает

public static final String DATE_TIME_PATTERN = "uuuuMMddHHmmss"; 

    String date = "20160908222020"; 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN).withZone(ZoneId.systemDefault()); 
    LocalDateTime d = LocalDateTime.parse(date, formatter); 
    DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN); 
    LocalDateTime d2 = LocalDateTime.parse(date, formatter2); 

ответ

1

Использование SimpleDateFormat, проще понять, что происходит (и этот подход сработал для меня).

public static final String SOURCE_DATE_FORMAT = "yyyyMMddHHmmss"; 
String date = "20160908222020"; 

SimpleDateFormat sourceDateFormat = new SimpleDateFormat(SOURCE_DATE_FORMAT); 
sourceDateFormat.setTimeZone("UTC"); // set this to whatever the source time zone is 

String adjustedDate = ""; 
try { 
    Date parsedDate = sourceDateFormat.parse(date); 
    adjustedDate = DateFormat.getDateTimeInstance().format(parsedDate); // getDateTimeInstance() returns the local date/time format (in terms of language/locale and time zone) of the device and format() formats the parsed date to fit that instance 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

Спасибо! Это потрясающе! – CodyMace

0

Вот решение с новым дата/время Api в

String DATE_TIME_PATTERN = "uuuuMMddHHmmss"; 
String utcDateTimeString = "20160908222020"; 

DateTimeFormatter utcFormatter = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN).withZone(ZoneId.of("UTC")); 
ZonedDateTime utcZonedDateTime = ZonedDateTime.parse(utcDateTimeString , utcFormatter); 

ZonedDateTime systemZonedDateTime = utcZonedDateTime.withZoneSameInstant(ZoneId.systemDefault()); 
LocalDateTime systemLocalDateTime = systemZonedDateTime.toLocalDateTime();