日常中最常用的表示时间的类就是java.util.Date类了,实际上Date类还有

  • java.sql.Date,
  • java.sql.Date类是对java.util.Date类的继承。从包名上也可以看出
  • java.sql.Date类是处理SQL时使用的类

 

通过查看java.sql.Date类,可以看到其主要的方法及接口均继承自java.util.Date类,例如以下创建方法

public Date(long date) {
        // If the millisecond date value contains time info, mask it out.
        super(date);

    }

它自己实现的接口主要为valueOf(String)和toString()方法,从这两个方法可以看出java.sql.Date在与字符串与日期转换的时候,只能够支持年/月/日的输入和输出。当然如果是通过其父类的方法进行创建的,例如通过long类型入参进行创建的实例中,仍然包含时间的信息。

对于java.util.Date类实例的操作,常用的可能有三类

1.创建日期实例

创建日期的方法为Date(long date),该方法将date参数传递给实例的一个long类型参数中,也就是说实际上Date类型依然是以数字的方式保持时间信息。再通过其它的接口来将其转化为我们所需要的时间信息。注意这个long参数为transient类型,这导致Date类型实例保存的时间信息无法进行序列化。

为了获取到当前的日期,可以使用Date()方法创建,该方法实际返回为将System.currentTimeMillis()作为参数调用上面提到的Date(long date)方法。

实际上,我们无法从Date实例中的long类型值直接知道当前的时间値,当然也就无法通过long值设置时间。我们常用SimpleDateFormat类来创建Date类型的时间,该类通过某种格式的字符串来创建Date实例

     DateFormat formate = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date newDate = formate.parse("2014-01-12");
            System.out.println(formate.format(newDate));
            System.out.println(newDate);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

输出为: 

2014-01-12
Sun Jan 12 00:00:00 CST 2014

实际上也可通过Calendar类来设置时间

        SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2000);
        cal.set(Calendar.MONTH, 3);
        cal.set(Calendar.DATE, 29);
        cal.set(Calendar.HOUR, 10);
        cal.set(Calendar.MINUTE, 12);
        cal.set(Calendar.SECOND, 15);
        Date date = cal.getTime();
        
        System.out.println(formate.format(date));

这里需要注意的是,设置月份是,是从0开始的,也就是说当传递0时,表示为1月,依次类推。输出为

2000-04-29 10:12:15

 2.设置和获取具体的时间值,例如年月日等信息

java.util.Date类中的日期获取方法例如getYear()和setYear(int)等,均为@Deprecated,即已被舍弃,实际上如果通过main函数直接调用并将这些方法的结果输出,也可能无法直接得到我们希望的结果。

例如在上述代码中加入System.out.println(newDate.getYear());语句,其输出为:114

实际上,调用setYear(int)时,有一个“+ 1900”的计算,getYear()则有一个“- 1900”这导致如果在设置时间值时,需要进行修正,例如需要设置年份为2000--03-03时有:

        SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            
        Date date = new Date();
        date.setYear(100);
        date.setMonth(3);
        date.setDate(3);
        
        System.out.println(formate.format(date));
        System.out.println(date.getYear());

此时输出值为:

2000-04-03 01:44:04
100

3.进行时间的推算

 

可通过计算直接对Date类型实例进行计算,例如需要推算出当前时间一个小时后的时间时,有

        SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date nowDate = new Date();
        Date newDate = new Date(nowDate.getTime()+1*24*60*60*1000);
        System.out.println("          now:"+formate.format(nowDate));
        System.out.println("one day later:"+formate.format(newDate));

输出可能为

          now:2014-02-26 01:12:18
one day later:2014-02-27 01:12:18

 

在实际上使用中,用于时间的计算,更多的是java.util.Calendar,例如

        SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date nowDate = new Date();
        
        Calendar cal = Calendar.getInstance();
        cal.setTime(nowDate);
        cal.add(Calendar.DATE, 1);
        Date newDate = cal.getTime();
        
        System.out.println("          now:"+formate.format(nowDate));
        System.out.println("one day later:"+formate.format(newDate));

 输出结果与上面的例子是一样的。

posted on 2014-02-26 01:45  苍老的鱼  阅读(222)  评论(0编辑  收藏  举报