设置为具有特定时区的日历的日期时间未给出java中其他时区的正确转换日期时间

时间:2018-02-18 05:10:46

标签: java timezone datetime-conversion java.util.calendar

这里我给出的参数有月,日,小时,秒,如(2,14,11,0),第一个设置区域值(IST)。

    Calendar localTime = Calendar.getInstance();
    localTime.setTimeZone(TimeZone.getTimeZone(zoneValue));
    localTime.set(2018, month, date, hourofday,minutes,seconds);

在下面的代码中,短名称是其他时区,例如:" PST",在将第一个日历设置为以下日历后,我没有获得与第一个日历参数相关的有效日期时间。

    Calendar germanyTime = new GregorianCalendar(TimeZone.getTimeZone(shortName));
    germanyTime.setTimeInMillis(localTime.getTimeInMillis());

我们公司仍在使用java 1.6。

请提前帮助我。

1 个答案:

答案 0 :(得分:1)

发布前搜索Stack Overflow。这已经多次得到解决。并阅读Oracle教程。这里简要介绍......

TL;博士

ZonedDateTime.of( 2018 , 1 , 23 , 12 , 34, 56 , 0 , ZoneId.of( “Asia/Kolkata” ) ) 
    .withZoneSameInstant( ZoneId.of( “Europe/Berlin” ) ) 

java.time

使用现代 java.time 类来取代您使用的麻烦的旧版日期时间类。

ZonedDateTime

将这些参数传递给ZonedDateTime.of而不是遗留Calendar

ZoneId

对于时区,请传递ZoneId个对象,而不是旧版TimeZone

切勿使用3-4个字母伪区域,如“PST”,“CST”和“IST”。始终使用大陆/地区格式的正确时区名称,例如America/Los_AngelesAfrica/Tunis

ZonedDateTime zdt = ZonedDateTime.of( 2018 , 1 , 23 , 12 , 34, 56 , 0 , ZoneId.of( “Asia/Kolkata” ) ) ;

调整到另一个区域。同一时刻,时间轴上的同一点,不同的挂钟时间。

ZonedDateTime zdt2 = zdt.withZoneSameInstant( ZoneId.of( “Europe/Berlin” ) ) ;

DateTimeFormatter

通过调用ZonedDateTime::toString以标准ISO 8601格式生成字符串。对于其他格式,请使用DateTimeFormatter类。

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore