我有一个日历对象,根据用户的时区可能是PST等,现在我想将其转换为GMT并保留时间,即日历最初是在PST的00:00:00设置的转换后应将其转换为08:00:00,并考虑时间/日期差异。有人能为我提供一些帮助。
提前感谢帮助。
谢谢,
Vaibhav的
答案 0 :(得分:4)
只需在GMT中创建一个新日历,将该日历中的时间设置为与原始日历相同,即可完成:
gmtCalendar.setTime(userCalendar.getTime());
这应该没问题,因为getTime()
调用及时返回 instant (即没有相关时区的java.util.Date
)。
与往常一样,如果你在Java中做了大量的日期/时间工作,你应该强烈考虑使用Joda Time。
答案 1 :(得分:0)
( ( 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 类。
将旧版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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。