2014-04-18 9 views
0

我有我构建的日期对象:Java的日期格式为SQL

Calendar cal = new GregorianCalendar(); 
    cal.set(2013, 12, 1, 0, 0, 0); 
    Date begin = new Date(cal.getTimeInMillis()); 

我想在查询中使用它,我所知道的查询需要的格式,如:2008-10-29 14:56:59

当我打印我的日期,它看起来像:Wed Jan 01 00:00:00 EST 2014

我的问题:

如何转换的DA TE格式从Wed Jan 01 00:00:00 EST 20142008-10-29 14:56:59

+3

使用['SimpleDateFormat'(http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)? –

+0

感谢您的链接,只是读它。那么''yyyy-MM-dd HH:mm:ss''是否有诀窍? –

+1

是的,它会将日期转换为您想要的格式。 –

回答

3

这应有助于:

Calendar cal = new GregorianCalendar(); 
cal.set(2013, 11, 1, 0, 0, 0); 
DateFormat dateFormat; 
dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
System.out.println(dateFormat.format(new Date(cal.getTimeInMillis()))); 
  • 11为十二月
+1

感谢您对12月的额外评论。 –

0

使用该工具来获取格式你想

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
String dateInString = "pass you date string here"; 
Date date = sdf.parse(dateInString); 

希望这有助于。

0

您可以使用simpleDateFormat类。下面给出一个简单的例子。

在这里,你必须提供你所需的日期格式,日期对象。

SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
String date =null;  
date = dateformat.format(begin); 
System.out.println(date); 
0

与数据库通信时使用对象而不是字符串。对于日期时间值,请使用日期时间对象。

java.time

避免麻烦的旧日期,时间类,包括CalendarGregorianCalendar。它们设计不佳,缺陷和混乱。在他们的烦恼中,toString方法在生成字符串时动态应用JVM的当前默认时区,这很有帮助,但事实证明这是一种反特性。

而是使用现代的java.time类。

如果您的JDBC driver更新为JDBC 4.2later,请直接使用java.time类型而不是java.sql类型。

改变您的输入字符串以符合ISO 8601格式。将中间的空间更改为T

String input = "2008-10-29 14:56:59".replace(" " , "T") ; 

解析为LocalDateTime,因为你没有输入时区的任何指示或偏移从-UTC。

LocalDateTime ldt = LocalDateTime.parse(input) ; 

或者指定日期时间值为整数。

LocalDateTime ldt = LocalDateTime.of(2013 , 12 , 1 , 0 , 0 , 0 , 0) ; 

如果您的数据库列的类型为TIMESTAMP WITHOUT TIME ZONE,那么您已准备好进行查询。您一定要了解,如果没有一个时区的上下文或偏移从-UTC,这样的价值观做代表一个特定的时刻,是不是点在时间轴上,而他们对可能的时刻模糊的想法。

String sql = "SELECT * FROM tbl_ WHERE when_ >= ? ; " ; 
PreparedStatement ps = conn.prepareStatement(sql) ; 
ps.setObject(1 , ldt) ; // Call `setObject` to pass a java.time object directly without converting into `java.sql.*` type. 
ResultSet resultSet = ps.executeQuery() ; 
… 
LocalDateTime ldt = resultSet.getObject(… , LocalDateTime.class) ; 

如果你本来打算跟踪在时间轴上的实际的时刻,特定的点,那么你就可以使用TIMESTAMP WITH TIME ZONE作为数据库列类型,并使用InstantZonedDateTime java.time类。