我有预计存储时区信息的日期格式:
SimpleDateFormat dateWithZoneFormat
= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
日期值示例,
2019-01-18T07:00:00.000+0530
上述日期的区域常量是亚洲/加尔各答 (+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区的时间则应该显示在同一区的时间。
如何以记录时的相同时区格式显示上述日期,而不是显示的日期(即不在机器默认时区中)。
有什么方法可以提取上述日期字符串中的区域信息吗?
最佳答案
java.time 的 OffsetDateTime
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);
此代码片段输出:
01/18/2019 07:00 AM
保留记录字符串的时间。时间以相同的 UTC 偏移量显示。
与老式的 Date
相反,OffsetDateTime
具有 UTC 偏移量,因此在解析和格式化时保持同一时间。
用法:亚洲/加尔各答是一个时区。 +05:30
是一个偏移量,它们不一样。例如,亚洲/科伦坡当前具有相同的偏移量,但仍被视为不同的时区。
链接: Oracle tutorial: Date Time解释如何使用java.time
。
关于java - 如何以与记录区域格式相同的格式获取显示时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54251224/