我的日期格式应该存储时区信息:
SimpleDateFormat dateWithZoneFormat
= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
日期值示例
2019-01-18T07:00:00.000+0530
上述日期的区域常数为Asia / Calcutta(+0530),Reference.
现在在不同时区的机器上显示时,我希望上述日期显示与上述日期相同的时区,即+530,这不是恒定的时区,可以根据用户所在的国家/地区进行更改。
我在Java中的显示代码如下:
SimpleDateFormat dateWithZoneFormat
= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
SimpleDateFormat displayDateFormat
= new SimpleDateFormat("MM/dd/yyyy hh:mm a");
Date date = DateUtils.getZoneDate("2019-01-18T07:00:00.000+0530");
String displayDate = DateUtils.displayDateFormat.format(date);
displayTag = displayDate + " " + displayTag;
上面的代码有问题,它会在创建显示时间时选择运行计算机的默认区域。
简单来说,如果在显示时在+0530区域中记录的时间应该在+0530区域中显示显示时间,如果在+0100区域中记录的时间应该在相同的区域时间中显示。
我该如何以记录时的相同区域格式显示上述日期,而不是显示该日期的日期(即不在计算机默认时区)。
有什么办法可以提取上述日期字符串中的区域信息?
答案 0 :(得分:2)
DateTimeFormatter recordedFormatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXX");
DateTimeFormatter displayFormatter
= DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a", Locale.ENGLISH);
OffsetDateTime dateTime = OffsetDateTime.parse("2019-01-18T07:00:00.000+0530", recordedFormatter);
String displayDateTime = dateTime.format(displayFormatter);
System.out.println(displayDateTime);
此代码段输出:
2019/01/18上午07:00
记录的字符串中的时间将保留。时间以相同的UTC偏移量显示。
与老式Date
相反,OffsetDateTime
具有UTC偏移量,因此在解析和格式化时保持一天中的同一时间。
用法:亚洲/ Calcutta是一个时区。 +05:30
是一个偏移量,它们并不相同。例如,亚洲/科伦坡目前处于相同的偏移时间,但仍被视为不同的时区。
链接: Oracle tutorial: Date Time解释了如何使用java.time
。