java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

本文详细解析了Java中处理日期时间的四大类API:Java.util.Date、java.sql.Date、java.sql.Time及java.sql.Timestamp的区别与用法。文章通过示例介绍了如何将字符串转换为这些日期时间格式,并展示了如何在不同数据库环境下选择合适的日期类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

 

java.lang.Object 
....|__java.util.Date 
..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time


【父类】java.util.Date日期格式为:年月日时分秒 
【子类】java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] 
【子类】java.sql.Time日期格式为:时分秒 
【子类】java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)

 

针对不同的数据库选用不同的日期类型 
·Oracle的Date类型,只需要年月日,选择使用java.sql.Date类型 
·MS Sqlserver数据库的DateTime类型,需要年月日时分秒,选择java.sql.Timestamp类型


------------------------------------------

四种对象内部均使用系统时间作为标准数据 
·系统时间:自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,即格林尼治标准时间(GMT) 
·本地时间:根据时区不同打印出来的时间[当时区为GMT+0时,系统时间与本地时间相同]

我们使用的是以本地时间为参考标准的 
------------------------------------------

String日期格式转换成Date日期格式

//java.util.Date 格式化
	    SimpleDateFormat f_utilDate=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	    String str="2011-5-31 14:40:50";
	    try {
	     java.util.Date utilDate=f_utilDate.parse(str);
	     System.out.println("java.util.Date:"+f_utilDate.format(utilDate));
	    } catch (ParseException e) {
	     e.printStackTrace();
	    }
	    //java.sql.Date 格式化(没有时分秒)
	    SimpleDateFormat f_sqlDate=new SimpleDateFormat("yyyy-MM-dd");
	    java.sql.Date sqlDate=java.sql.Date.valueOf("2014-11-20");
	    System.out.println("java.sql.Date:"+f_sqlDate.format(sqlDate));
	    //java.sql.Time sqltime时间格式的转换
	    SimpleDateFormat f_sqlTime=new SimpleDateFormat("hh:mm:ss");
	    java.sql.Time sqltime = java.sql.Time.valueOf("13:44:53"); 
	    System.out.println("java.util.Timestamp:"+f_sqlTime.format(sqltime));
	    //java.sql.Timestamp
	    SimpleDateFormat f_sqlTimesDate=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
	    java.sql.Timestamp sqlTimestamp=java.sql.Timestamp.valueOf("2011-5-31 14:40:50.200");
	    System.out.println("java.util.Timestamp:"+f_sqlTimesDate.format(sqlTimestamp));
	    //java.util.Date 转换成 java.sql.Date 格式
	       try{
	        SimpleDateFormat DateFormate =   new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	               java.util.Date date1 = DateFormate.parse("2011-5-31 14:40:50");
	               java.sql.Date sqlDate0 = new java.sql.Date(date1.getTime());
	               System.out.println(DateFormate.format(sqlDate0));
	       }catch (Exception ex) {
	            System.out.println(ex.getMessage());
	       }
	    //java.sql.Date 转换成 java.util.Date 格式
	    java.sql.Date sqlDate1=java.sql.Date.valueOf("2005-12-12");
	    java.util.Date utilDate1=new java.util.Date(sqlDate1.getTime());
	    System.out.println("java.sql.Date 转换成 java.util.Date 格式:"+f_utilDate.format(utilDate1));
	    //java.util.Date转换java.sql.Timestamp 
	    new java.sql.Timestamp(new java.util.Date().getTime());//此处IDE报错
	    //java.util.Date转换java.sql.Time 
	    new java.sql.Time(new java.util.Date().getTime());
	    //获取当前时间戳
	    Timestamp timestamp  = new Timestamp(System.currentTimeMillis());


   我们可以使用DateFormat处理字符串来定义时间日期的格式 
   注:String都是先转换为java.util.Date,然后再转换成所需的格式

   

示例:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

public class a  {   
    public static void main(String[] args) throws ParseException{   
        try{   
             String dateString = "2010-08-20 12:00:00.125";    
              DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS",Locale.ENGLISH);//设定格式   
             dateFormat.setLenient(false);   
             java.util.Date utilDate = dateFormat.parse(dateString);//util类型   
             java.sql.Timestamp dateTime = new java.sql.Timestamp(utilDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型   
             System.out.println(dateTime);   
        }catch(Exception ex){   
            ex.printStackTrace();   
        }        
    }   
}  

获取Date 的年月日

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    	Date date1=sdf.parse("2017-12-25");
    	Calendar calendar1=Calendar.getInstance();
    	calendar1.setTime(date1);
    	int year=calendar1.get(Calendar.YEAR);
    	int month=calendar1.get(Calendar.MONTH);
    	int day=calendar1.get(Calendar.DAY_OF_MONTH);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值