Java中定义了很多不同的类来处理日期和时间。java.util.Date类代表的是当前时间(精确到毫秒)。该类只是对一个长整数进行封装,它保存的是自格林尼治标准时间1970年1月1日零时起开始经过的毫秒数。下面给出了两种计算当前时间的方法:
Long t0=System.currentTimeMillis();//以毫秒表示的当前时间
java.util.Date now= new java.util.Date(); //实际上是一回事
Long t1= now.getTime(); //把日期型转换成长整数类型
Date类包含很多非常有趣的方法,但是这些方法大部分都已经废弃不用了,现在我们更多地使用的是java.util.Calendar和java.text.DateFormat类。如果我们想打印日期或时间,我们可以用DateFormat类,这个类会自动处理根据特定地点提出的不同日期和时间格式。DateFromat类甚至还可以正确显示那些不使用阳历的地区的日期和时间。
//用当前地点的默认格式显示今天的日期
DateFormat defaultDate= DateFromat.getDateInstance();
System.out.println(defaultDate.format(new Date()));
//用短时间格式显示当前地点的当前时间
DateFormat shortTime= DateFormat .getTimeInstance(DateFormat.SHORT);
System.out.println(shortTime.format(new Date());
//用长格式显示日期和时间
DateFormat longTimestamp = DateFromat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
System.out.println(ongTimestamp.format(new Date());
//利用SimpleDateFromat类定义我们需要的格式模板
DateFormat myformat= new SimpleDateFormat("yyyy.MM.dd");
System.out.println(myformat.format(new Date()));
Try{ //DateFormat类也可以解析日期
Date leapday=myformat.parse("2000.02.29");
}catch(ParseException e){....}
Dare类和它的毫秒表示只允许进行形势非常简单的日期运算:
Long now= System.currentTimeMillis(); //当前时间
Long anHourFromNow =now + (60*60*1000); //机上3600000毫秒
为了进行更为复杂的日期和时间运算,并且用人们通常比较关心的方式来处理日期,我们可以使用java.util.Calendar类:
//得到一个当前地点和时区的Calendar实例
Calendar cal=Calendar.getInstance();
cal.setTime(new Date()); //设置当前时间
Int dayOfYear = cal.get(Calendar.DAY_OF_YEAR); //今天是这一年的哪一天?
Cal.set(2000,Calendar.FEBRUARY,29); //设置字段年,月和日
Int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); //2000年的闰日是星期几?
//2001年5月的第三哥星期四是这个月的哪一天?
Cal.set(Calendar.YEAR,2001); //设置年
Cal.set(Calendar.MONTH,Calendar.May); //设置月
Cal.set(Calendar.DAY_OF_WEEK,Calendar.THURSDAY); //设置星期几
Cal.set(Calendar.DAY_OF_WEEK_IN_MONTH,3); //设置星期
Int dayOfMonth=cal.get(Calendar.DAY_OR_MONTH); //在一个月中查询日期
//要得到的Date对象表示的是30天后的日期
Date today=new Date();
cal.setTime(today);
Cal.add(Calendar.DATE,30);
Date expiration =cal.getTime(); //检索结果日期