gpt4 book ai didi

java - SimpleDateFormat - 如何防止时区被重新格式化

转载 作者:行者123 更新时间:2023-12-01 16:46:55 24 4
gpt4 key购买 nike

当我解析 String 然后格式化生成的 Date 时,我遇到了 SimpleDateFormat 更改 datetimestamp 外观的问题.

下面的代码片段演示了该问题。注意:我知道用相同的 SimpleDateFormat 解析并格式化相同的日期似乎是徒劳的,但这是一个人为的示例,只是为了演示原理:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String dateStringToConvert = "2016-03-12T22:00:00.000-00:00";
try {
Date date = dateFormat.parse(dateStringToConvert);
String convertedDateString = dateFormat.format(date);
System.out.println("Wanted : " + dateStringToConvert);
System.out.println("Actual : " + convertedDateString);
} catch (ParseException e) {
e.printStackTrace();
}

输出如下:

Wanted : 2016-03-12T22:00:00.000-00:00

Actual : 2016-03-12T22:00:00.000Z

由于此日期将用于自动化测试来填写表单,因此 datetimestamp 的格式在被 解析和格式化后保持完全相同非常重要SimpleDateFormat,所以我不希望它删除 -00:00 并添加 Z

这似乎是一个非常简单的问题,但我找不到任何明显的答案。

最佳答案

恐怕SimpleDateFormat无法帮助您。这个类设计得很糟糕,而且非常有限,更不用说它所存在的所有问题了:https://eyalsch.wordpress.com/2009/05/29/sdf/

如果您有 Java 8,只需使用 java.time API。不知道为什么要将 String 转换为 Date 只是为了将其转换回另一个 String,但如果您希望最终结果为String-00:00 作为偏移量,那么你可以这样做:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
// offset, use "-00:00" when it's zero
.appendOffset("+HH:MM", "-00:00")
// create formatter, always work in UTC
.toFormatter().withZone(ZoneOffset.UTC);
String dateStringToConvert = "2016-03-12T22:00:00.000-00:00";
Instant instant = fmt.parse(dateStringToConvert, Instant::from);
String result = fmt.format(instant);
System.out.println(result);

这将打印:

2016-03-12T22:00:00.000-00:00

关于java - SimpleDateFormat - 如何防止时区被重新格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com