简单的日期格式解析然后格式化日期不匹配
问题描述:
我遇到了SimpleDateFormat奇怪的行为,我不知道如何处理。简单的日期格式解析然后格式化日期不匹配
我需要解析特定格式的日期(星期几,然后一天,然后是月份,然后是年份,然后是时间)。 但是,我遇到了一个行为,当解析一个日期给了我一个非常强大的结果(其他日期)。这是一个小型的独立示例,它在我的机器上输出。
public static void main(String[] args) throws Exception {
test("E YYYY kk:mm:ss");
test("E d YYYY kk:mm:ss");
test("E d MMMM YYYY kk:mm:ss");
}
public static void test(String format) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date now = new Date();
System.out.println(now);
String formattedNow = sdf.format(now);
System.out.println(formattedNow);
Date parsedFormattedNow = sdf.parse(formattedNow);
String formattedParsedNow = sdf.format(parsedFormattedNow);
System.out.println(formattedParsedNow);
System.out.println(formattedNow.equals(formattedParsedNow));
}
输出:
Sat Apr 27 13:48:07 MSK 2013
Sat 2013 13:48:07
Sat 2013 13:48:07
true
Sat Apr 27 13:48:07 MSK 2013
Sat 27 2013 13:48:07
Sat 5 2013 13:48:07
false
Sat Apr 27 13:48:07 MSK 2013
Sat 27 April 2013 13:48:07
Sat 5 January 2013 13:48:07
false
为什么那么27个变换成5,而4至1月?
答
嘛,有两个方面的位置:
- 模式
E d YYYY kk:mm:ss
不包含每月指标在所有。因此,在格式化为“Sat 27 2013 13:48:07”之后,您如何期待解析部分能够计算出月份? - 所有的模式使用
YYYY
这是周年,而不是日历年。通常应该使用“星期几,星期几”模式。如果您使用yyyy
,则最终模式将起作用。
,第一图案出现工作的唯一原因是,你实际上并不设置(当然和时间)比“一周中的一天”和今年其他任何东西。如果你打印出parsedFormattedNow
(没有其他格式),你会看到解析结果实际上是1月5日。只是你没有注意到它,因为它仍然是一个星期六。
是的,先生,你是绝对正确的。 +1并被接受。 – execc 2013-04-27 09:57:22