如何将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时间轴上的一个时刻。 Instant
和java.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); } }
与另一个答案,你可能有麻烦的时间信息(比较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());
如果你想插入dt
variables到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