如何将java.util.Date转换为java.sql.Date?

我想使用java.util.Date作为input,然后用它创build一个查询 – 所以我需要一个java.sql.Date

我惊讶地发现,它不能隐式或明确地进行转换 – 但是我甚至不知道如何做到这一点,因为Java API对我来说还是相当新的。

如果您尝试使用仅限date的值(不包括时间,无时区),请使用LocalDate类而不是java.util.Date

java.time

在Java 8和更高版本中,与早期版本的Java捆绑在一起的麻烦的旧date时间类已经被新的java.time包取代。 请参阅Oracle教程 。 大部分的function已经被移植到了ThreeTen-Backport中的 Java 6和7,并在ThreeTenABP中进一步适应了Android。

SQL数据types DATE仅用于date,没有时间和时区。 Java从来没有正确的类,直到Java 8中的java.time.LocalDate 。让我们通过根据特定的时区取得今天的date来创build这样的值(时区对于确定date是重要的,因为在巴黎早些时候比如在蒙特利尔)。

 LocalDate todayLocalDate = LocalDate.now( ZoneId.of( "America/Montreal" ) ); // Use proper "continent/region" time zone names; never use 3-4 letter codes like "EST" or "IST". 

在这一点上,我们可能会完成。 如果您的JDBC驱动程序符合JDBC 4.2规范 ,则应该能够通过PreparedStatement上的setObject传递LocalDate以存储到SQL DATE字段中。

 myPreparedStatement.setObject( 1 , localDate ); 

同样,使用ResultSet::getObject从SQL DATE列获取Java LocalDate对象。 在第二个参数中指定类使您的代码types安全 。

 LocalDate localDate = ResultSet.getObject( 1 , LocalDate.class ); 

换句话说, 在JDBC 4.2或更高版本中, 整个问题是无关紧要的

如果您的JDBC驱动程序不以这种方式执行,则需要回退到转换为java.sqltypes。

转换为java.sql.Date

要转换,使用添加到旧的date时间类的新方法。 我们可以调用java.sql.Date.valueOf(…)来转换一个LocalDate

 java.sql.Date sqlDate = java.sql.Date.valueOf( todayLocalDate ); 

并走向另一个方向。

 LocalDate localDate = sqlDate.toLocalDate(); 

java.util.Date转换

虽然您应该避免使用旧的date时间类,但您可能会被迫在使用现有的代码时使用。 如果是这样,你可以转换为/从java.time。

通过Instant类,它代表了UTC时间轴上的一个时刻。 Instantjava.util.Date类似。 但是请注意, Instant具有高达纳秒的分辨率,而java.util.Date分辨率仅为毫秒 。

要转换,请使用添加到旧类中的新方法。 例如, java.util.Date.from( Instant )java.util.Date::toInstant

 Instant instant = myUtilDate.toInstant(); 

要确定一个date,我们需要一个时区的上下文。 在任何特定的时刻,date都会随着时区的变化而变化。 应用ZoneId来获取ZonedDateTime

 ZoneId zoneId = ZoneId.of ( "America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId ); LocalDate localDate = zdt.toLocalDate(); 

†java.sql.Date类假装是没有date的date,但实际上按照每天的时间调整到午夜时间。 混乱? 是的,旧的date时间课堂是一团糟。

没关系….

 public class MainClass { public static void main(String[] args) { java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); System.out.println("utilDate:" + utilDate); System.out.println("sqlDate:" + sqlDate); } } 

解释它。 链接是http://www.java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htm

与另一个答案,你可能有麻烦的时间信息(比较date与意想不到的结果!)

我build议:

 java.util.Calendar cal = Calendar.getInstance(); java.util.Date utilDate = new java.util.Date(); // your util date cal.setTime(utilDate); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime()); // your sql date System.out.println("utilDate:" + utilDate); System.out.println("sqlDate:" + sqlDate); 

这个函数将从javadate对象返回一个转换后的SQLdate。

 public java.sql.Date convertJavaDateToSqlDate(java.util.Date date) { return new java.sql.Date(date.getTime()); } 

java.util.Data转换为java.sql.Data将会丢失小时,分钟和秒钟。 所以,如果可能的话,我build议你使用java.sql.Timestamp像这样:

 prepareStatement.setTimestamp(1, new Timestamp(utilDate.getTime())); 

欲了解更多信息,你可以检查这个问题 。

在我从JXDatePicker(java日历)中selectdate并将其作为SQLdatetypes存储在数据库中的情况下,下面的工作正常..

java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());

其中,pickedDate是JXDatePicker的对象

这个函数将从javadate对象返回一个转换后的SQLdate。

 public static java.sql.Date convertFromJAVADateToSQLDate( java.util.Date javaDate) { java.sql.Date sqlDate = null; if (javaDate != null) { sqlDate = new Date(javaDate.getTime()); } return sqlDate; } 

这里将Util Date转换为Sqldate和雅这个例子是我在我的项目中使用的一个例子可能对您也有帮助。

 java.util.Date utilStartDate = table_Login.getDob();(orwhat ever date your give form obj) java.sql.Date sqlStartDate = new java.sql.Date(utilStartDate.getTime());(converting date) 

首先格式化你的java.util.Date。 然后使用格式化date在java.sql.Date中获取date

 java.util.Date utilDate = "Your date" SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); final String stringDate= dateFormat.format(utilDate); final java.sql.Date sqlDate= java.sql.Date.valueOf(stringDate); 

比较两个date的方法(util.date或sql.date)

  public static boolean isSameDay(Date a, Date b) { Calendar calA = new GregorianCalendar(); calA.setTime(a); Calendar calB = new GregorianCalendar(); calB.setTime(b); final int yearA = calA.get(Calendar.YEAR); final int monthA = calA.get(Calendar.MONTH); final int dayA = calA.get(Calendar.DAY_OF_YEAR); final int yearB = calB.get(Calendar.YEAR); final int monthB = calB.get(Calendar.MONTH); final int dayB = calB.get(Calendar.DAY_OF_YEAR); return yearA == yearB && monthA == monthB && dayA == dayB; } 

我是一个新手:经过多次运行这个工作。 思想可能是有用的

  String bufDt = bDOB.getText(); //data from form DateFormat dF = new SimpleDateFormat("dd-MM-yyyy"); //data in form is in this format Date bbdt = (Date)dF.parse(bufDt); // string data is converted into java util date DateFormat dsF = new SimpleDateFormat("yyyy-MM-dd"); //converted date is reformatted for conversion to sql.date String ndt = dsF.format(bbdt); // java util date is converted to compatible java sql date java.sql.Date sqlDate= java.sql.Date.valueOf(ndt); // finally data from the form is convered to java sql. date for placing in database 

试试这个

 public static String toMysqlDateStr(Date date) { String dateForMySql = ""; if (date == null) { dateForMySql = null; } else { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dateForMySql = sdf.format(date); } return dateForMySql; } 

我认为最好的转换方式是:

 static java.sql.Timestamp SQLDateTime(Long utilDate) { return new java.sql.Timestamp(utilDate); } Date date = new Date(); java.sql.Timestamp dt = SQLDateTime(date.getTime()); 

如果你想插入dtvariables到SQL表中,你可以这样做:

 insert into table (expireAt) values ('"+dt+"'); 

您可以使用此方法将utildate转换为sqldate,

 DateUtilities.convertUtilDateToSql(java.util.Date) 

我正在使用下面的代码,请尝试一下

 DateFormat fm= new SimpleDateFormatter(); 

指定所需date的格式,例如"DD-MM_YYYY"'YYYY-mm-dd'然后使用java Date数据types作为

 fm.format("object of java.util.date"); 

那么它会parsing你的date

我正在尝试以下编码工作正常。

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate);

如果您是Mysql的date列,则可以传递此date的string表示forms

所以我使用DateFormatter类来格式化它,然后在sql语句或准备语句中将其设置为一个string

这里是代码插图:

 private String converUtilDateToSqlDate(java.util.Date utilDate) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String sqlDate = sdf.format(utilDate); return sqlDate; } 

String date = converUtilDateToSqlDate(otherTransaction.getTransDate());

//然后在你的sql语句中传递这个date