我试图解析String
( YYYY-MM-dd HH:mm
),以Date
,但获得比预期错误的日期。
码:
Date newDate = null;
String dateTime = "2013-03-18 08:30";
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm", Locale.ENGLISH);
df.setLenient(false);
try {
newDate = df.parse(dateTime);
} catch (ParseException e) {
throw new InvalidInputException("Invalid date input.");
}
生产:
太阳12月30日08:30:00 EST 2012(错误)
我尝试设置从宽关闭,但没有运气。
更新
感谢Sudhanshu的答案,它帮助我解决了Java转换。 当我进入从上面的代码返回的日期到数据库中,我得到正确的日期,但时间总是00:00
。
ps.setDate(3, new java.sql.Date(app.getDate().getTime()));
YYYY应该是YYYY-
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
请在此处检查的SimpleDateFormat的文档
Java 6中: http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
Java 7中: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
使用小的情况下,Y,没有上限。 即YYYY不YYYY
这里检查意见: 简单的Java的日期格式 ,并引用有其他的答案。
这里的现代答案。 其他答案被罚款的答案时,他们写在2013年后,现代日期和时间API出来为老班更换Date
, SimpleDateFormat
朋友。 恕我直言,你现在应该使用新的类。 他们更程序员友好。
LocalDateTime newDate = null;
String dateTime = "2013-03-18 08:30";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm", Locale.ENGLISH);
try {
newDate = LocalDateTime.parse(dateTime, dtf);
} catch (DateTimeParseException e) {
throw new InvalidInputException("Invalid date input.");
}
除类名这不是从旧的代码不同。 与其他的例子会有差别,通常是现代课程将提供更清晰的代码和错误的机会较少。
对于只是一个差的小示范,让我们试试你有没有和大写格式模式字符串YYYY
它:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm", Locale.ENGLISH);
现在代码抛出一个java.time.format.DateTimeParseException: Text '2013-03-18 08:30' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MonthOfYear=3, DayOfMonth=18, WeekBasedYear[WeekFields[SUNDAY,1]]=2013},ISO resolved to 08:30 of type java.time.format.Parsed
。 这是很长的,我知道。 要注意的事情是,没有一年的领域当中它提到,只有一个WeekBasedYear。 这是不一样的; 你现在可能认为这是正是因为大写想通了Y
是基于星期年(只用了一个星期数usseful),你应该使用小写y
为一年。 我认为这种行为有点比老班做了什么更多的帮助:他们给你一个结果是错误的,假装一切都很好,并在关于什么是错的黑暗完全离开你。
接下来,我知道你是想你的日期,时间存储到数据库中。 在过去,你会转换为一些适当的java.sql
类型。 没有存在的必要。 我相信,随着一个JDBC 4.2驱动程序,你可以这样做:
ps.setObject(3, newDate);
我还没有与数据库进行测试这一点,虽然。 请注意,您使用setObject()
代替setDate()