2016-02-28 2 views
2

Я использую Java 8
Это то, что мой ZonedDateTime выглядитZonedDateTime для UTC со смещением применяется?

2013-07-10T02:52:49+12:00 

Я получаю это значение как

z1.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME) 

где z1 является ZonedDateTime.

Я хотел, чтобы преобразовать это значение в качестве 2013-07-10T14:52:49

Как я могу это сделать?

+1

Я до сих пор не понимаю: D. И как это отличается от http://stackoverflow.com/q/35688559/1743880? Что вы подразумеваете под «convert to 2013-07-10T14: 52: 49'»? – Tunaki

+0

применить '+12 часов' к' 02: 52: 49', чтобы сделать это '14: 52: 59', теперь понятно? – daydreamer

+1

Итак, вы хотите пойти 12 часов в будущем для того же смещения зоны? – Tunaki

ответ

3

Это то, что вы хотите? Это преобразует ваш ZonedDateTime в LocalDateTime с заданным ZoneId путем преобразования ZonedDateTime в Instant.

LocalDateTime localDateTime = LocalDateTime.ofInstant(z1.toInstant(), ZoneId.of("UTC")); 

Или, может быть, вы хотите, чтобы пользователи системы-часовой пояс вместо HARDCODED UTC:

LocalDateTime localDateTime = LocalDateTime.ofInstant(z1.toInstant(), ZoneId.systemDefault()); 
+0

@assylias: Спасибо за ваше редактирование, но вы можете видеть, о чем я говорю: 'LocalDateTime.ofInstant' преобразуется в' LocalDateTimeofstant' в вашем редактировании. – SimMac

+0

Huh ... Это выглядит хорошо для меня ... Возможно, вы можете попробовать с другим браузером, чтобы проверить, есть ли у вас такая же проблема. – assylias

+0

Странно, это происходит только в Chrome для OS X (даже в инкогнито без плагинов). – SimMac

0

@SimMac Спасибо за четкостью. Я также столкнулся с той же проблемой и смог найти ответ на основе его предложения.

public static void main(String[] args) { 
    try { 
     String dateTime = "MM/dd/yyyy HH:mm:ss"; 
     String date = "09/17/2017 20:53:31"; 
     Integer gmtPSTOffset = -8; 
     ZoneOffset offset = ZoneOffset.ofHours(gmtPSTOffset); 

     // String to LocalDateTime 
     LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(dateTime)); 
     // Set the generated LocalDateTime's TimeZone. In this case I set it to UTC 
     ZonedDateTime ldtUTC = ldt.atZone(ZoneOffset.UTC); 
     System.out.println("UTC time with Timezone   : "+ldtUTC); 

     // Convert above UTC to PST. You can pass ZoneOffset or Zone for 2nd parameter 
     LocalDateTime ldtPST = LocalDateTime.ofInstant(ldtUTC.toInstant(), offset); 
     System.out.println("PST time without offset   : "+ldtPST); 

     // If you want UTC time with timezone 
     ZoneId zoneId = ZoneId.of("America/Los_Angeles"); 
     ZonedDateTime zdtPST = ldtUTC.toLocalDateTime().atZone(zoneId); 
     System.out.println("PST time with Offset and TimeZone : "+zdtPST); 

    } catch (Exception e) { 
    } 
} 

Выход:

UTC time with Timezone   : 2017-09-17T20:53:31Z 
PST time without offset   : 2017-09-17T12:53:31 
PST time with Offset and TimeZone : 2017-09-17T20:53:31-08:00[America/Los_Angeles] 
Смежные вопросы