gpt4 book ai didi

java - 为什么 SimpleDateFormat 会更改日期?

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:45 25 4
gpt4 key购买 nike

给定以下代码:

[...]

public void testFormatDateString() throws ParseException {

String dateString = new java.util.Date().toString();

System.out.println(dateString);

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY", Locale.ENGLISH);

Date date = format.parse(dateString);

System.out.println(date.toString());
}

[...]

之前:2017 年 8 月 19 日星期六 18:26:11 BST

之后:2017 年 1 月 7 日星期六 17:26:11 GMT

为什么日期变了?

最佳答案

大写的 Y 代表 "week year" ,它有 364 或 371 天,而不是通常的 365 或 366。使用小写字母 y(由 Date#toString 使用)一切都按预期工作:

public void testFormatDateString() throws ParseException {

String dateString = new java.util.Date().toString();

System.out.println(dateString);

// Force to Locale.US as this is hardcoded in Date#toString
SimpleDateFormat format = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss z yyyy", Locale.US);

Date date = format.parse(dateString);

System.out.println(date.toString());
}

输出:

Sat Aug 19 17:50:39 GMT 2017
Sat Aug 19 17:50:39 GMT 2017

See on ideone.com

如评论中所述,在解析 dateString 时确保包含 Locale.US,因为它已硬编码在 Date#toString 中.参见 this question了解详情。

关于java - 为什么 SimpleDateFormat 会更改日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45774497/

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