Java中时间类型简单的思考

1、java.util.Date及其格式化
Date 类有两个附加的功能,一是表示年月日时分秒,二是对日期字符进行格式化和分析。但是由于API不符合国际规范。于是在JDK1.1中,Calendar类用于日期和时间域之间的转换;抽象类DateFormat对日期字符串进行格式化和分析,SimpleDateFormat类为DateFormat的实现类。

2、Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。

Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年的时间,这适合大多数人的时间要求。Date只是一个对long值的对象封装,它表现出的年月日的时间描述,只是它toString()方法提供的。

//打印出年,月,日,小时,分钟,秒还有时区
        Date date1 = new Date();
        System.out.println("-------------------date1--------------------\n"+date1);
        //获得当前时间距离1970/1/1 0:0的毫秒差
        long datel1 = date1.getTime();
        //获得当前时间的另一个方法,为当前时间距离1970/1/1 0:0的毫秒差
        long datel2 = System.currentTimeMillis();
        //将时间以年,月,日,小时,分钟,秒还有时区形式打印出来
        String dates1 = date1.toString();
        System.out.println("-------------------datel1--------------------\n"+datel1);
        System.out.println("-------------------datel2--------------------\n"+datel2);
        System.out.println("-------------------dates1--------------------\n"+dates1);

可以得到结果是:
-------------------date1--------------------
Tue Mar 26 16:35:33 CST 2013
-------------------datel1--------------------
1364286933197
-------------------datel2--------------------
1364286933236
-------------------dates1--------------------
Tue Mar 26 16:35:33 CST 2013

3、SimpleDateFormat类是DateFormat的实现类。新建SimpleDateFormat对象的时候,可以规范时间的格式。然后通过format()方法将Date转化成String 。parse可以将日期字符串转换成Date类型
        //定义时间格式,默认是13-3-26 下午2:16格式
        SimpleDateFormat simpDatef1 = new SimpleDateFormat();
        SimpleDateFormat simpDatef2 = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss");
        SimpleDateFormat simpDatef3 = new SimpleDateFormat("MM-dd-yyyy");
        String datef1 = simpDatef1.format(date1);
        String datef2 = simpDatef2.format(date1);
        String datef3 = simpDatef3.format(date1);
        //可以利用parse方法将String转化成Date时间类型
        String dates2 = "03-12-2013";
        try {
            
            Date date4 = simpDatef3.parse(dates2);
            String dates3 = simpDatef3.format(date4);
            System.out.println("-------------------date4--------------------\n"+date4);
            System.out.println("-------------------dates3--------------------\n"+dates3);
        } catch (ParseException e) {
           e.printStackTrace();
        }
        System.out.println("-------------------datef1--------------------\n"+datef1);
        System.out.println("-------------------datef2--------------------\n"+datef2);
        System.out.println("-------------------datef3--------------------\n"+datef3);

结果是:
-------------------date4--------------------
Tue Mar 12 00:00:00 CST 2013
-------------------dates3--------------------
03-12-2013
-------------------datef1--------------------
13-3-26 下午4:35
-------------------datef2--------------------
03-26-2013 04:35:33
-------------------datef3--------------------
03-26-2013
4、timestamp
   在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型。
      try {
            String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串
            String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串
            Date date4 = string2Date(sToDate);
            Timestamp datet1 = string2Time(sToTimestamp);
            System.out.println("---------------------------Date:\n"+date4.toString());//结果显示
            System.out.println("---------------------------Timestamp:\n"+datet1.toString());//结果显示
           }catch(Exception e) {
            e.printStackTrace();
      }
      public final static java.sql.Date string2Date(String dateString)
            throws java.lang.Exception {
            DateFormat dateFormat;
            dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            //dateFormat.setLenient(false);
            java.util.Date timeDate = dateFormat.parse(dateString);//util类型
            java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
            return dateTime;
    }
    public final static java.sql.Timestamp string2Time(String dateString) 
            throws java.text.ParseException {
            DateFormat dateFormat;
            dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS");//设定格式
            //将String通过parse转化成Date
            java.util.Date timeDate = dateFormat.parse(dateString);//util类型
            //再将Date转换成timestamp
            java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
            return dateTime;
    }

结果是:
---------------------------Date:
2005-08-18
---------------------------Timestamp:
2005-08-18 14:21:12.123

5、小结

Date -> timestamp
           dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS");//设定格式
           java.util.Date timeDate = dateFormat.parse(dateString);//util类型
           java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型

Date -> String
           SimpleDateFormat simpDatef2 = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss");
           String datef2 = simpDatef2.format(date1);


String -> Date
         Date date4 = simpDatef3.parse(dates2);  

你可能感兴趣的:(Date,Timestamp)