边城愚人

如果我不在边城,我一定是在前往边城的路上。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  31 随笔 :: 0 文章 :: 96 评论 :: 0 Trackbacks
        对于没有使用过Calendar的程序员来说,再次处理日期时不妨使用Calendar而不仅仅是Date和SimpleDateFormat等类。这篇文章根据几个使用日期的场景来说明如何使用Calendar等类。
        在数据库编程时,我们通常将java日期字段选作Date型的(一般是java.sql.Date,继承于java.util.Date,使用方法是类似的),当然也可以存储为字符串甚至是long型的time,但我们这里只讨论date型的。如果存储的时间是系统当前时间,我们可以使用Date d = new Date();就得到想要的时间;以前我编程时也指定存储日期的格式,但现在想来不是很有必要,完全可以在读出数据时指定格式。另一种可选的方法是使用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如下的相应方法:
Screenshot-1.png

但就像你所看到的,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。
posted on 2007-06-22 08:40 kafka0102 阅读(4068) 评论(0)  编辑  收藏 所属分类: J2SE

只有注册用户登录后才能发表评论。


网站导航: