当我将1949年之前的日期传递给波纹管方法时,我遇到了java日期的问题。 我返回的日期是例如2049年,我知道它与日期格式有关,并且认为使用yyyy而不是RRRR会修复它。但我只是不明白为什么或如何重新获得它。任何帮助都会被贬低
public static java.sql.Date parseDate(String date) throws ParseException {
if (date != null) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
return new java.sql.Date(dateFormat.parse(date).getTime());
}
return null;
}
感谢Jon
答案 0 :(得分:2)
让我为你格式化..
public static java.sql.Date parseDate(String date) throws ParseException {
if (date != null) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
return new java.sql.Date(dateFormat.parse(date).getTime());
}
return null;
}
我怀疑这就是你想要的......
private Date convertDate() throws ParseException
{
String dateStr = "21-02-2010";
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = null;
if (dateStr != null)
{
date = new Date(dateFormat.parse(dateStr).getTime());
}
System.out.println(date);
return date;
}
2010年2月21日,你会得到...... Sun Feb 21 00:00:00 GMT 2010
对于21-02-1938,你会得到...... 星期一2月21日00:00:00 GMT 1938
这有帮助吗?我可能是因为你的代码中有MMM。
答案 1 :(得分:0)
java.sql.Date.valueOf(
LocalDate.parse( "12-Jan-23" , DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US ) )
)
您的代码忽略了时区的关键问题。确定日期需要时区。对于任何特定时刻,日期在全球范围内因地区而异。
您的代码使用始终为UTC的Date
。因此,从错误命名的Date
类生成的日期值对于UTC是准确的,但对America/Montreal
或Asia/Kolkata
等其他时区无效。
这项工作的现代方法是使用java.time类来取代麻烦的旧遗留日期时间类。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
要解析传入的字符串,请使用DateTimeFormatter
定义格式设置模式。为翻译月份名称时使用的人类语言指定Locale
。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US );
LocalDate localDate = LocalDate.parse( "12-Jan-2017" , f );
使用JDBC 4.2及更高版本,您可以使用LocalDate
和setObject
方法将getObject
直接传递到您的数据库。
对于尚未更新的JDBC驱动程序,请回退到java.sql类型。
java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );
LocalDate localDate = sqlDate.toLocalDate();
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。