DateFormat 未正确解析日期
DateFormat Not Parsing Date Correctly
我正在尝试解析为 Java "Mar 28,2017 13:00" 类型的日期字符串。
我写了下面的代码
DateFormat df = new SimpleDateFormat("MMM dd,YYYY HH:mm");
System.out.println(df.parse(dateTime));
此代码似乎可以正确解析小时和分钟,但日期始终是 2017 年 1 月 1 日。例如对于上面给出的字符串,输出是 "Sun Jan 01 13:00:00 IST 2017"
关于这里可能有什么问题的任何想法?
DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH);
System.out.println(df.parse("Mar 28,2017 13:00"));
问题在于您编写日期和时间模式的方式。应该是
DateFormat df = new SimpleDateFormat("MMM dd,yyyy hh:mm");
请参考
http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
干杯!!!
解决办法是更正模式:
DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH);
System.out.println(df.parse("Mar 28,2017 12:00"));
// Tue Mar 28 12:00:00 CEST 2017
解释:用符号"Y"表示year-of-weekdate(或称为week-based-year)。它不是日历年,只能以合理的方式与 week-of-year 和 day-of-week 组合。但是您的模式仅包含月份和 day-of-month,因此 SimpleDateFormat
仅使用 week-of-year (=1) 和 day-of-week (=Sunday) 的默认值,并隐式地使用 US-standard week-definition(从周日开始的周)。这导致 2017 年 week-based-year 的第一个日历周,因此观测日期为 2017-01-01。
使用符号 "y" 代替,这意味着 year-of-era(此处:正常日历年)。
注意: 与@Shamil Sungatov 接受的答案相比,我为小时部分选择了模式字母 "HH",而不是 "hh"( 12-hour-clock).如果要解析的时钟小时的值为 12(将以不同的方式解释,即在 "hh" 的情况下为午夜),则这是相关的。
我正在尝试解析为 Java "Mar 28,2017 13:00" 类型的日期字符串。
我写了下面的代码
DateFormat df = new SimpleDateFormat("MMM dd,YYYY HH:mm");
System.out.println(df.parse(dateTime));
此代码似乎可以正确解析小时和分钟,但日期始终是 2017 年 1 月 1 日。例如对于上面给出的字符串,输出是 "Sun Jan 01 13:00:00 IST 2017"
关于这里可能有什么问题的任何想法?
DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH);
System.out.println(df.parse("Mar 28,2017 13:00"));
问题在于您编写日期和时间模式的方式。应该是
DateFormat df = new SimpleDateFormat("MMM dd,yyyy hh:mm");
请参考 http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
干杯!!!
解决办法是更正模式:
DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH);
System.out.println(df.parse("Mar 28,2017 12:00"));
// Tue Mar 28 12:00:00 CEST 2017
解释:用符号"Y"表示year-of-weekdate(或称为week-based-year)。它不是日历年,只能以合理的方式与 week-of-year 和 day-of-week 组合。但是您的模式仅包含月份和 day-of-month,因此 SimpleDateFormat
仅使用 week-of-year (=1) 和 day-of-week (=Sunday) 的默认值,并隐式地使用 US-standard week-definition(从周日开始的周)。这导致 2017 年 week-based-year 的第一个日历周,因此观测日期为 2017-01-01。
使用符号 "y" 代替,这意味着 year-of-era(此处:正常日历年)。
注意: 与@Shamil Sungatov 接受的答案相比,我为小时部分选择了模式字母 "HH",而不是 "hh"( 12-hour-clock).如果要解析的时钟小时的值为 12(将以不同的方式解释,即在 "hh" 的情况下为午夜),则这是相关的。