转换java中不同时区之间的时间

时间:2017-10-28 06:20:41

标签: java

我想将时间从用户转换为另一个时区。我只是无法做到正确。我只能在当前时间得到答案。而且我不希望显示日期。

输入是来自没有日期的用户的时间。如何转换为其他时区?

    String f = (String)c1.getItemAt(c1.getSelectedIndex());
    String t = (String)c2.getItemAt(c2.getSelectedIndex());
    TimeZone fromTimeZone = TimeZone.getTimeZone(f);
    TimeZone toTimeZone = TimeZone.getTimeZone(t);
    calendar.setTimeZone(fromTimeZone);                                                
    calendar.add(Calendar.MILLISECOND,fromTimeZone.getRawOffset() * -1);                                
    calendar.add(Calendar.MILLISECOND,toTimeZone.getRawOffset());
    System.out.println(calendar.getTime();

1 个答案:

答案 0 :(得分:0)

目前还不清楚你想要/需要什么,所以我会发布一些片段以防万一。 我为此目的使用ZonedDateTime。 ZonedDateTime.now()为您提供当前日期和时间。这样您就可以创建任何日期/时间:

String zdtString = "2017-01-26T14:00:00+03:00"; // zone UTC +3 hours
ZonedDateTime zdt = ZonedDateTime.parse(zdtString, DateTimeFormatter.ISO_DATE_TIME);

可以通过以下方式创建区域:

ZoneId zone = ZoneId.of("Europe/Moscow");
ZoneId zone1 = ZoneId.of("+03:00"); // offset used

有将ZonedDateTime转换为其他时区的方法。如果您想在新区域中获得14:00,请使用zdt.withZoneSameInstant(ZoneId.of(" Asia / Yekaterinburg"))。 如果您想知道您所在区域的时间是14:00 + 03:00,请使用zdt.withZoneSameLocal(yourZone)

如果使用zdt.toString(),您将获得默认的字符串表示形式 - 完整数据。当然,您可以格式化ZonedDateTime。

DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("HH:mm");
System.out.println(zdt.format(dtf1));

格式化文档:documentation