Java Date 详解
1.java.sql.Date与java.util.Date比较
① java.sql.Date 只有日期,没有时间
② java.util.Date 时间日期都具备
③ ResultSet.getDate(columnInt)取得的值是java.sql.Date类型,只有日期,没有时间,就算转换为java.util.Date同样没有时间
④ java.sql.Timestamp 时间日期都具备,ResultSet.getTimestamp(columnInt) 时间日期都有
⑤ 建表 T1 用以测试,建表语句↓
⑥ DateTest 类(测试时间转换)
① @Temporal(TemporalType.DATE)数据库只记录日期
② 字段中的Date的类型必须是java.uril.Date,如果是sql.Date时间精度设置无效
③ @Enumerated(EnumType.STRING)枚举存入数据库以String存入,EnumType.ORDINAL存入为枚举
④ 枚举Titl 类
① java.sql.Date 只有日期,没有时间
② java.util.Date 时间日期都具备
③ ResultSet.getDate(columnInt)取得的值是java.sql.Date类型,只有日期,没有时间,就算转换为java.util.Date同样没有时间
④ java.sql.Timestamp 时间日期都具备,ResultSet.getTimestamp(columnInt) 时间日期都有
⑤ 建表 T1 用以测试,建表语句↓
create table t1(
id number not null,
charcol char default 'Y',
datecol date default sysdate,
intcol integer default 12);
insert into t1 values(1,'y',sysdate,12);
insert into t1 values(2,'n',sysdate,13);
insert into t1 values(3,null,sysdate,null);
commit;
⑥ DateTest 类(测试时间转换)
package com.date;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateTest {
public static void main(String[] args) {
Date date = new Date(System.currentTimeMillis());
System.out.println(date);
java.util.Date date2 = new java.util.Date(System.currentTimeMillis());
System.out.println(date2);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String a = sdf.format(date2);
System.out.println(a);
Timestamp t = new Timestamp(System.currentTimeMillis());
String b = sdf.format(t);
System.out.println(b);
Calendar c = Calendar.getInstance();
c.setTime(date);
System.out.println(c.get(Calendar.MONTH));
String ss = "1898-12-12 09:08:23";
Timestamp t2 = Timestamp.valueOf(ss);
System.out.println(t2);
java.util.Date d1 = new java.util.Date();
SimpleDateFormat q = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(q.format(d1));
java.sql.Date date3=new java.sql.Date(0);
java.util.Date d2=new java.util.Date (date.getTime());
Date sqlDate = new Date(date.getTime());
java.util.Date d3 = new java.util.Date(sqlDate.getTime());
System.out.println("utl获得秒数 "+d3.getSeconds());
DateTest.getSqlDate();
}
public static void getSqlDate(){
Connection con = DateTest.getConnection();
ResultSet rs = null;
PreparedStatement ps= null;
try {
ps = con.prepareStatement("select * from t1 t where t.id = 1");
rs = ps.executeQuery();
while (rs.next()) {
java.sql.Date sqlDate = rs.getDate(3);
java.util.Date utlDate = rs.getDate(3);
Timestamp tDate = rs.getTimestamp(3);
System.out.println("sqlDate "+sqlDate);
System.out.println("utlDate "+utlDate);
System.out.println("tDate "+tDate);
java.util.Date Date2 = new java.util.Date(sqlDate.getTime());
System.out.println(Date2);
}
} catch (Exception e) {
}finally{
DateTest.closeJdbc(rs, con, ps);
}
}
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String userName = "slt_plat";
String passWord = "slt_plat";
conn = DriverManager.getConnection(url, userName, passWord);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void closeJdbc(ResultSet rs,Connection con,Statement pst){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException e) {
}
}
}
}
2.数据库配置对应Date
① @Temporal(TemporalType.DATE)数据库只记录日期
② 字段中的Date的类型必须是java.uril.Date,如果是sql.Date时间精度设置无效
③ @Enumerated(EnumType.STRING)枚举存入数据库以String存入,EnumType.ORDINAL存入为枚举
④ 枚举Titl 类
package com.sf;
public enum Tile {
A,B,C
}
⑤ Entity
package com.sf;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity(name="teacher")
@Table(name = "teacher", catalog = "lportal")
public class Teacher {
@Id
/*
* @GeneratedValue = native auto自动生成;
*/
@GeneratedValue
private int id;
private String name;
private String title;
/*
* @Enumerated(EnumType.STRING)自定义类型;
*/
@Enumerated(EnumType.ORDINAL)
private Tile tile;
/**
* @Temporal(value=)value可以默认不写,直接写入值;
* @Temporal(TemporalType.DATE)数据库只记录日期;
* java.sql.Date 时间精度只有日期,没有时间,下面的Date如果用这个类,时间精度设置无效;
*/
private Date birthDate;
@Temporal(TemporalType.TIME)
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Tile getTile() {
return tile;
}
public void setTile(Tile tile) {
this.tile = tile;
}
public Teacher() {
}
public Teacher(int id,Date date, String name, String title,Tile tile) {
this.id = id;
this.name = name;
this.title = title;
this.tile = tile;
this.birthDate = date;
}
}