Java-将当前日期转换为UTC和任意时区的UTC
我需要两样东西:Java-将当前日期转换为UTC和任意时区的UTC,java,timezone,Java,Timezone,我需要两样东西: 将当前时间转换为UTC(以便以UTC格式存储日期) -->result=java.util.Date. 将加载的日期(UTC格式)转换为任意时区-->结果= java.util.Date或毫秒 因为这两点都要记住日光 (一) 我在stackoverflow上发现以下内容: Calendar c = Calendar.getInstance(); System.out.println("current: "+c.getTime()); TimeZone z = c.getTim
Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;
System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);
c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));
System.out.println("GMT Time: "+c.getTime());
-->结果等于UTC
(二)
-->我有个问题
在我的示例中,我将时区“欧洲/维也纳”(使用日光)的日期作为utc存储到数据库中。
欧罗巴/维也纳-->10:00
UTC-->09:00
现在我想把这个UTC(09:00)转换成“欧洲/维也纳”,我得到:09:00=我损失了一个小时。你想过像这样使用现有的DateTime API吗 更新
withZone
public static Date convertDate(Date sourceDate, DateTimeZone sourceTimeZone, DateTimeZone resultTimeZone) {
LocalDateTime localDateTime = new LocalDateTime(date.getTime());
DateTime sourceDateTime = localDateTime.toDateTime(sourceTimeZone);
DateTime resultDateTime = sourceDateTime.withZone(resultTimeZone);
return resultDateTime.toLocalDateTime().toDateTime().toDate();
}
转换为UTC可以简化为:
public static Date toUtcDate(Date sourceDate, DateTimeZone sourceTimeZone) {
return convertDate(sourceDate, sourceTimeZone, DateTimeZone.UTC);
}
此呼叫成功为我增加1小时:
convertDate(new Date(), DateTimeZone.UTC, DateTimeZone.forID("Europe/Vienna"));
我同意C.Vogel-Joda时间对于这些要求来说非常好。你能给我一个Joda的解决方案吗?看看我的第二个帖子-毫秒不受“withZone”的影响:(我试过使用你的方法。首先我从“ToutDate”得到utc日期,但它没有返回正确的值(+1小时).之后我尝试了“convertDate”,但它与我尝试的目标时区没有区别-我总是得到相同的日期返回。我现在明白了..确定它有效,会很快更新答案Well now“convertDate”提供+1小时的日期..可能是日光问题?这一行是我脑海中的问题:LocalDateTime LocalDateTime=new LocalDateTime(date.getTime());因为sourceDate始终是UTC日期,为什么我要使用本地日期?如果我们返回java.util.date,此对象的时区将重置为本地时区?可能是
convertDate(new Date(), DateTimeZone.UTC, DateTimeZone.forID("Europe/Vienna"));