java-8 - 如何在java中获取TimeZone偏移值
问题描述
我有一个来自设备的日期,我想在 Java 中执行以下操作:
- 我想将此日期“2021-05-27T18:47:07+0530”解析为yyyy-mm-dd HH:MM:SS
- 获取日期的偏移值,以便我可以将时区偏移作为 +05:30 或它来自的任何时区。
对于第一个我已经完成了这个并且看起来它有效,但是任何更好的更小的方法也会很方便:
String date = "2021-05-27T18:47:07+0530";
String inputPattern = "yyyy-MM-dd'T'HH:mm:ss+SSSS";
String outputPattern = "yyyy-MM-dd HH:mm:ss";
LocalDateTime inputDate = null;
String outputDate = null;
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputPattern, Locale.ENGLISH);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputPattern, Locale.ENGLISH);
inputDate = LocalDateTime.parse(date, inputFormatter);
outputDate = outputFormatter.format(inputDate);
System.out.println("inputDate: " + inputDate);
System.out.println("outputDate: " + outputDate);
输出是:
inputDate: 2021-05-27T18:47:07.053
outputDate: 2021-05-27 18:47:07
在这种情况下,我不知道如何获取时区的偏移值。
有很多建议,包括使用 SimpleDateFormat 和 ZonedDateTime 等,但考虑到偏移值可以是动态的,即可以是 +05:30、+09:00 等,这应该是最好的答案。
请在这种情况下提供帮助。
解决方案
像这样试试。
String dateTime = "2021-05-27T18:47:07+0530";
String inputPattern = "yyyy-MM-dd'T'HH:mm:ssZ";
String outputPattern = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ",
Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(dateTime, dtf);
ZoneOffset tz = zdt.getOffset();
System.out.println(tz);
System.out.println(zdt.format(DateTimeFormatter.ofPattern(outputPattern,
Locale.ENGLISH)));
印刷
+05:30
2021-05-27 18:47:07
分区日期时间也可以使用最初解析的相同格式重新打印。
推荐阅读
- django - 如何在 Django 中创建用于匿名投票的应用程序?
- google-cardboard - 谷歌纸板头部运动跟踪不起作用
- python - 如何使一列变成索引,另一列变成标题,其中 3 列是数据?
- java - 流元素是否已排序?
- css - 如何在 Firefox 中加载 css 样式并解决内容安全策略:问题?
- .htaccess - 使用 htaccess 阻止所有人,除了来自特定推荐人的访问者
- react-native - 在模态框外单击时关闭模态框
- c# - 将字节从控制器发送到 AJAX 响应以在视图上播放为 mp3
- javascript - 如何在数据库中保存换行符
- javascript - 如何避免多次打开模态?