查看了stackoverflow中的许多线程后,似乎无法找到正在寻找的正确方法。如果有人能发光,那就太好了。
所以我用SQL日期填充了一个JCombo Box,但是这样做我将它们格式化为使用SimpleDateFormat,它将它们转换为格式为dd / MM / yyyy的字符串。
当程序运行时,他可以选择某个日期来查询数据库,所以这里是问题
我设法使用string.split创建一个格式为yyyy / MM / dd的String,将其保存到一个数组中,然后用另一个字符串对它们进行排序
有没有办法将此字符串(2014/04/13)转换为SQL日期,以便我可以查询我的数据库,或者我发现它不正确
谢谢,
答案 0 :(得分:3)
有没有办法将此字符串(2014/04/13)转换为SQL日期?
示例代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
try {
java.util.Date utilDate = format.parse("2014/04/13");
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println(sqlDate);
} catch (ParseException e) {
e.printStackTrace();
}
输出:
2014-04-13
使用
SimpleDateFormat
将字符串解析为java.util.Date
。使用java.sql.Date(miliseconds)构造函数。
答案 1 :(得分:2)
这里有一个例子:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
java.lang.Date langDate = sdf.parse("2014/04/13");
java.sql.Date sqlDate = new java.sql.Date(langDate.getTime());
答案 2 :(得分:0)
myPreparedStatement.setObject(
… ,
LocalDate.parse(
"23/01/2018" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
) ;
现代方法使用 java.time 类取代了可怕的Date
/ Calendar
/ SimpleDateFormat
类。
LocalDate
类表示没有日期,没有time zone或offset-from-UTC的仅日期值。
定义一种格式化模式以匹配您的输入字符串。
String input = "23/01/2018" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate localDate = LocalDate.parse( input , f ) ;
String output = localDate.toString() ; // Generate text in standard ISO 8601 format.
从JDBC 4.2开始,我们可以与数据库交换 java.time 对象。使用智能对象而不是哑文本来进行数据库交互。
myPreparedStatement.setObject( … , localDate ) ;
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。