Java日历时区转换为GMT问题

时间:2011-07-22 13:25:52

标签: java calendar timezone

我有一个日历对象,根据用户的时区可能是PST等,现在我想将其转换为GMT并保留时间,即日历最初是在PST的00:00:00设置的转换后应将其转换为08:00:00,并考虑时间/日期差异。有人能为我提供一些帮助。

提前感谢帮助。

谢谢,

Vaibhav的

2 个答案:

答案 0 :(得分:4)

只需在GMT中创建一个新日历,将该日历中的时间设置为与原始日历相同,即可完成:

gmtCalendar.setTime(userCalendar.getTime());

这应该没问题,因为getTime()调用及时返回 instant (即没有相关时区的java.util.Date)。

与往常一样,如果你在Java中做了大量的日期/时间工作,你应该强烈考虑使用Joda Time

答案 1 :(得分:0)

TL;博士

( ( GregorianCalendar ) myCal )  // Cast from a general `Calendar`  to  specific subclass `GregorianCalendar`. 
    .toZonedDateTime()           // Convert from troublesome legacy class to modern java.time class, `ZonedDateTime`.
    .toInstant()                 // Extract a UTC-specific value, an `Instant` object.

java.time

现代方法使用 java.time 类。

将旧版Calendar对象(如果GregorianCalendar)转换为ZonedDateTime。调用添加到旧类的新转换方法。

GregorianCalendar gc = ( GregorianCalendar ) myCal ;
ZonedDateTime zdt = gc.toZonedDateTime() ;

现在提取Instant,一个始终为UTC的值。你可以用这种方式来思考它:ZonedDateTime =(Instant + ZoneId)

Instant instant = zdt.toInstant() ;

为了获得更多灵活性,例如以各种格式生成字符串,请转换为OffsetDateTime对象。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

关于 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