请参阅以下测试代码(java 11):
public static final String DATE_FORMAT_TIMESTAMP = "YYYY-MM-dd'T'HH:mm:ss'Z'";
...
var timestamp = OffsetDateTime.now();
System.out.println(timestamp);
var formatter = DateTimeFormatter.ofPattern(DATE_FORMAT_TIMESTAMP);
var zt = timestamp.format(formatter);
System.out.println(zt);
...输出:enter code here
2020-12-27T23:34:34.886272600+02:00
2021-12-27T23:34:34Z注格式化的时间年为2021。这只发生在27/12,很可能一直到31/12。
有人能给我解释一下吗?以及如何修复代码以获得正确的格式化字符串?
发布于 2020-12-27 23:25:16
您的模式有两个问题:
Y使用而不是,字母Y指定week-based-year,而y指定year-of-era。但是,出于在u中提到的原因,我建议您使用y而不是y。您还想检查一下这个好听的回答关于week-based-year的内容。Z 用单引号将括起来:这是的错误。字母Z指定zone-offset,如果用单引号将其括起来,它将简单地表示文字Z。查看DateTimeFormatter文档页面,了解更多关于这些事情的信息。
快速演示:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
final String DATE_FORMAT_TIMESTAMP = "uuuu-MM-dd'T'HH:mm:ssZ";
// OffsetDateTime now with the default timezone of the JVM
var timestamp = OffsetDateTime.now();
System.out.println(timestamp);
var formatter = DateTimeFormatter.ofPattern(DATE_FORMAT_TIMESTAMP);
var zt = timestamp.format(formatter);
System.out.println(zt);
// OffsetDateTime now with the timezone offset of +02:00 hours
timestamp = OffsetDateTime.now(ZoneOffset.of("+02:00"));
System.out.println(timestamp);
zt = timestamp.format(formatter);
System.out.println(zt);
// Parsing a user-provided date-time
String strDateTime = "2020-12-27T23:34:34.886272600+02:00";
timestamp = OffsetDateTime.parse(strDateTime);
System.out.println(timestamp);
zt = timestamp.format(formatter);
System.out.println(zt);
}
}输出:
2020-12-27T23:44:35.531145Z
2020-12-27T23:44:35+0000
2020-12-28T01:44:35.541700+02:00
2020-12-28T01:44:35+0200
2020-12-27T23:34:34.886272600+02:00
2020-12-27T23:34:34+0200发布于 2020-12-27 21:46:58
这是因为大写的YYYY。你需要yyyy在这里。
Y指的是每周一年。那是周数属于的年份。例如,2020年12月27日是2021年的第一周。
https://stackoverflow.com/questions/65470770
复制相似问题