咖啡日语论坛

 找回密码
 注~册
搜索
查看: 2800|回复: 0

使用Java中Calendar等日期操作类

[复制链接]
发表于 2007-7-5 15:36:57 | 显示全部楼层 |阅读模式
对于没有使用过Calendar的程序员来说,再次处理日期时不妨使用Calendar而不仅仅是Date和SimpleDateFormat等类。这篇文章根据几个使用日期的场景来说明如何使用Calendar等类。
      在数据库编程时,我们通常将java日期字段选作Date型的(一般是java.sql.Date,继承于java.util.Date,使用方法是类似的),当然也可以存储为字符串甚至是long型的time,但我们这里只讨论date型的。如果存储的时间是系统当前时间,我们可以使用Date d= newDate();就得到想要的时间;以前我编程时也指定存储日期的格式,但现在想来不是很有必要,完全可以在读出数据时指定格式。另一种可选的方法是使用Calendar类,方法如下:

    public Date now(){
        Calendar c
= Calendar.getInstance();
        
return c.getTime();
    }


   
        如果要显示数据库中的日期,比如要在web页面上显示出诸如下面的日期字符串:“2007-06-21,21:18:03”,而输入的参数即为对应于数据库的date型日期,方法如下:

    public String time(Date date){
        SimpleDateFormat sdf
= new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss");
      String s
= sdf.format(date);
        
return s;
    }


但这里并没有Calendar的事情,原因很简单, Calendar并不能指定日期的格式,我们当然可以通过拼串的形式得到想要的字符串,相比来说,SimpleDateFormat的使用更合适些。
      好了,下面要说一个能显示出Calendar用武之地的例子。假如一个web表单中有个出生年月日的选项,该选项使用下拉框的方式选择,即选项中有三个分别对应于年月日的下拉框,下拉框的内容是静态的,比如年是“1930-2007”的option,月份是“1-12”的option,日是“1-31”的option。我们要写一个方法,参数为从下拉框中得到的三个字符串参数,返回结果为Date型日期以便存入数据库中。下面是使用Calendar类的实现方法:

    public Date getTime(String year,String month,String day){
        Calendar c
= Calendar.getInstance();
        c
.setLenient(false);
        try{
            c
.set(Calendar.YEAR, Integer.parseInt(year));
            c
.set(Calendar.MONTH, (Integer.parseInt(month)-1));
            c
.set(Calendar.DATE, Integer.parseInt(day));
            Date d
= c.getTime();
            
return d;
        }catch(Exception e){
               
//            
        }
        
return null;
    }


       由于不能确定输入参数是否为有效的数字,需要异常处理,这里只是简单的返回 null。需要指出的是,Calendar中的月份是从“0”开始以“11”结束的,使用时要格外注意一下。我们知道,每个月的天数是不一样的,如果我们的month输入的是“1”(就是二月),而day输入的是“31”,Calendar(也包括Date类)默认的会将日期下延到下一个月而不报错;如果我们不希望这样处理,可以通过c.setLenient(false);使得严格要求日期有效,这样上面的情况下函数就会抛出异常。
        Calendar还有一个应用情况。假定我们从数据库中得到date,希望能从date中得到具体的时间信息;可以使用date如下的相应方法:


但就像你所看到的,java doc上很明白地depricated这些方法。可选择的方法是使用Calendar类。例子如下:   

public
void getDetailsOfTime(Date date){
        Calendar c
= Calendar.getInstance();
        c.setTime(date);
        
int y = c.get(Calendar.YEAR);
        
int m = c.get(Calendar.MONTH);
        
int d = c.get(Calendar.DATE);
        
int h = c.get(Calendar.HOUR);
        
int mi = c.get(Calendar.MINUTE);
        
int s = c.get(Calendar.SECOND);
        System.out.printf(
"year=%d,month=%d,date=%d,hour=%d,mimute=%d,second=%d",y,m,d,h,mi,s);
    }



        如上便是我基本的使用 Calendar类的情况,如果有不正确的地方欢迎指正。关于 Calendar的更详细的使用方法,可以参考java doc。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注~册

本版积分规则

小黑屋|手机版|咖啡日语

GMT+8, 2024-5-11 22:51

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表