Java中用于表示日期時(shí)間的類有很多,其中較常用的兩個(gè)是java.util.Date和java.sql.Date。這兩個(gè)類的區(qū)別在于它們分別是基于Java平臺(tái)和SQL數(shù)據(jù)庫(kù)平臺(tái)的。java.util.Date是基于Java平臺(tái)的類,它能夠表示任意時(shí)間,但提供的方法卻非常有限,而java.sql.Date是基于SQL數(shù)據(jù)庫(kù)平臺(tái)的類,它繼承自java.util.Date,但提供了訪問(wèn)和操作SQL TIMESTAMP值的功能。
java.util.Date類是Java API中較為基礎(chǔ)的類之一,通過(guò)new Date()創(chuàng)建實(shí)例后,可以通過(guò)getTime()方法獲取實(shí)例表示的時(shí)間戳。但是,由于該類并沒(méi)有提供方法用于獲取、設(shè)置年、月、日、小時(shí)、分鐘、秒的值等,因此我們需要使用Calendar或DateFormat等第三方類來(lái)進(jìn)行操作。
Date date = new Date(); long time = date.getTime(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate = format.format(date); System.out.println("當(dāng)前時(shí)間:" + strDate);
在數(shù)據(jù)庫(kù)交互的過(guò)程中,經(jīng)常需要通過(guò)JDBC將Java數(shù)據(jù)類型映射到SQL數(shù)據(jù)類型,此時(shí)就需要用到j(luò)ava.sql.Date類。它是java.util.Date的子類,可以通過(guò)它實(shí)現(xiàn)將日期存儲(chǔ)到數(shù)據(jù)庫(kù)中的操作,使用方法與java.util.Date類類似,不過(guò)它只保留了年月日三個(gè)信息,時(shí)間信息被忽略。使用preparedStatement的setDate()方法可以將java.sql.Date傳入數(shù)據(jù)庫(kù)中。
java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); String sql = "INSERT INTO table_name (date_column) VALUES (?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setDate(1, sqlDate); int rows = preparedStatement.executeUpdate();
總的來(lái)說(shuō),java.util.Date類是Java平臺(tái)的日期時(shí)間處理類,功能比較有限,而java.sql.Date類則是基于SQL數(shù)據(jù)庫(kù)平臺(tái)的日期時(shí)間處理類,具有更多的數(shù)據(jù)庫(kù)交互功能。在實(shí)際開(kāi)發(fā)中,我們需要根據(jù)具體的場(chǎng)景來(lái)選擇使用哪一個(gè)類。