我正在尝试使用SimpleDateFormat
解析日期,但我遇到了一种奇怪的行为。
此示例在我的计算机上打印"Sun Jan 01 19:00:32 CET 2012"
:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class Test {
public static void main(String[] args) throws ParseException {
System.out.println(new SimpleDateFormat("MMM dd HH:mm:ss YYYY", Locale.ENGLISH).parse("Sep 26 19:00:32 2012"));
}
}
我希望返回"Wed Sep 26 19:00:32 CET 2012"
。
我的DateFormat字符串不正确吗?
答案 0 :(得分:10)
这一年使用小型上限y
:
System.out.println(new SimpleDateFormat("MMM dd HH:mm:ss yyyy", Locale.ENGLISH).
parse("Sep 26 19:00:32 2012"));
大上限Y
是“周年”according to javadoc。
答案 1 :(得分:2)
使用yyyy
(小写)代替YYYY
(大写)。 Y
是周年;而y
是年。
另请注意,Y
模式仅在 Java 7 中引入,这可以解释您看到错误的原因。根据{{3}}:
如果指定了周年'Y'且日历不支持任何日期 一周,使用日历年('y')代替。支持 可以通过电话测试一周的年份 getCalendar()。isWeekDateSupported()。
使用Java 7和GregorianCalendar
,您的代码可以正常运行,正如您在 documentation 中看到的那样。
答案 2 :(得分:0)
问题在于日期解析不是格式化。尝试在解析中传递新的Date(),查看结果并相应地更改格式。