我正在尝试将格式为2020-06-09T06:30:00Z
的UTC日期字符串转换为类似Asia/Calcutta
的时区。
UTC
和Asia/Calcutta
之间的时间偏移量为+5:30
,因此将2020-06-09T06:30:00Z
转换为Asia/Calcutta
的预期结果为2020-06-09T12:00:00Z
但我得到的是2020-06-09T01:00:00Z
String utcDate = "2020-06-09T06:30:00Z";
String timezone = "Asia/Calcutta";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
LocalDateTime date = LocalDateTime.parse(utcDate, formatter); //2020-06-09T06:30
ZonedDateTime zonedDate = ZonedDateTime.of(date, ZoneId.of(timezone)); //2020-06-09T06:30+05:30[Asia/Calcutta]
Date dateConverted = Date.from( zonedDate.toInstant()); //Tue Jun 09 01:00:00 UTC 2020
我认为zoneddate.toInstant()
是将减法5:30
而不是添加5:30
转换为2020-06-09T06:30
。我的机器处于UTC时区。可能是它转换为当地时间,不知道是什么问题。下面的方法也试了,还是一样的问题。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone(timezone));
sdf.parse(dateString);
我同意您的观点,您应该强烈倾向于使用Java.time,即现代Java日期和时间API。当你知道怎么做的时候就不复杂了。
String utcDate = "2020-06-09T06:30:00Z";
String timezone = "Asia/Calcutta";
ZoneId zone = ZoneId.of(timezone);
ZonedDateTime zdt = Instant.parse(utcDate).atZone(zone);
System.out.println("zdt: " + zdt);
输出为:
ZDT:2020-06-09T12:00+05:30“亚洲/加尔各答”
Date oldfashionedDate = Date.from(Instant.parse(utcDate));
System.out.println("oldfashionedDate: " + oldfashionedDate);
您可能会怀疑日期
是否正确。是的。由于我在欧洲/哥本哈根时区,当前偏移量+02:00,date
在这个时区打印,因此一天中的时间是8:30(date
不包含时区或偏移量)。如果我在亚洲/加尔各答时区跑步:
老式日期:2020年6月9日12:00:00
您注意到ist
代表印度标准时间,而不是cest
代表中欧夏季时间。和预期的一样,时间是12点。
z
硬编码为格式模式字符串中的文字。正如我所说的,它是一个偏移量,因此需要将其解析为偏移量。localdatetime
。localdatetime
。没有任何偏移,因此您正在丢失信息。instant
将其解析为默认格式,即不使用任何显式格式化程序(offsetdatetime
和zoneddatetime
也可以)。维基百科文章:ISO 8601
问题内容: 我从我的API获取此日期字符串: 但是此日期为UTC格式,我想将其转换为当地时间,该怎么办? 我尝试了这个: 但是它返回了这个错误: 问题答案: 您的日期格式模式错误。改成: 有关更多信息,请参见SimpleDateFormat的javadoc。
问题内容: 这是我的约会日期“ 15-05-2014 00:00:00” 如何将IST转换为UTC即(到14-05-2014 18:30:00) 基于时区到UTC时区。 我的代码是 如果用户从任何区域输入相同的日期,则将获得UTC时间(例如:从澳大利亚,然后从15-05-2014 00:00:00到14-05-2014 16:00:00) 请任何建议。 问题答案: 您不能将日期值“转换为”其他时区
> 如何将IST转换为UTC,即(至2014年5月14日18:30:00) 我的代码是 > 如果用户从任何区域输入相同的日期,则将获得UTC时间(例如:从澳大利亚输入,然后是2014年5月15日00:00:00至2014年5月14日16:00:00) 请提出任何建议。
问题内容: 为您准备的头抓板。 我正在从IPInfoDB的API中获取地理IP数据,它从UTC返回 包括 DST 的时区偏移(如果当前已反映)。 例如,我住在EST(-5),目前是DST,因此geo IP API返回()作为偏移量。 因为DST令人头疼,所以这太好了。但是令我惊讶的是,它又引起了头疼。 我将此数据加载到PHP中,以通过AJAX传递给应用程序。我想在应用程序上获取IP地址的实时本地时
问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始