Date和Calendar类的使用方法(一)

Date和Calendar是Java类库里提供对时间进行处理的类。

Date类顾名思义,一看就知道是和日期有关的类了,这个类最主要的作用就是获得当前时间了,然而这个类里面也具有设置时间以及一些其他的功能,可是由于本身设计的问题,这些方法却遭到众多批评,而这些遭受批评的功能都已移植到另外一个类里面,这就是今天要讲到的第二个类Calendar里面。在讲两个类之前,这里又不能不多提一个类,那就是DateFormat类,这个类是用来格式化日期的

看一个获取当前时间的例子:

Date date = new Date();
System.out.println(date.getTime());

上面的语句首先创建了Date的一个对象,接着使用getTime方法获得当前的时间,但是注意了,输出后的结果确实一串长整型的数字,这是为什么?实际上这是系统根据当前时间计算出来的一个long型的数

要显示正确的时间,这就要利用到上面的DateFormat类了,这个类是一个基类,它有一个子类是SimpleDateFormat,具体用法请看下面的代码:

Date date = new Date();
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
System.out.println(dateFm.format(date));

这段代码开始创建了一个Date的对象,用来获取当前时间,而重点就在于后面的SimpleDateFormat对象,这个对继承了DateFormat,利用format方法对Date对象进行格式化,然后输出,而格式的定制是由用户定制的,EEEE代表星期,MMMM代表月份,而dd代表日,yyyy代表年。使用这个方法就可以根据用户自定义的格式进行输出时间。

1.Calendar与Date互转:
(1) Calendar转化为Date

Calendar cal=Calendar.getInstance(); 
Date date=cal.getTime(); 

(2) Date转化为Calendar

Date date=new Date(); 
Calendar cal=Calendar.getInstance(); 
cal.setTime(date); 

Date类表示特定的瞬间,精确到毫秒
有2个方法可以创建Date对象。
public Date()——分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)

public void test(){
Date date=new Date();
System.out.println(date);
}

public Date(long date) 根据给定的毫秒值创建日期对象

public void test2() {
     long time = System.currentTimeMillis();
     Date date = new Date(time);
     System.out.println(date);
 }

获得Date对象中的信息

Date d2 = new Date(); 
int year = d2.getYear() + 1900; //年份 
int month = d2.getMonth() + 1; //月份 
int date = d2.getDate(); //日期
int hour = d2.getHours(); //小时
int minute = d2.getMinutes(); //分钟  
int second = d2.getSeconds(); //秒
int day = d2.getDay(); //星期几 
System.out.println(“年份:” + year); 
System.out.println(“月份:” + month); 
System.out.println(“日期:” + date); 
System.out.println(“小时:” + hour); 
System.out.println(“分钟:” + minute); 
System.out.println(“秒:” + second); 
System.out.println(“星期:” + day); 

使用Date类中对应的get方法,可以获得Date类对象中相关的信息,需要注意的是使用getYear获得是Date对象中年份减去1900以后的值,所以需要显示对应的年份则需要在返回值的基础上加上1900,月份类似。在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。

获得Calendar类中的信息

Calendar c2 = Calendar.getInstance();  
int year = c2.get(Calendar.YEAR); //年份 
int month = c2.get(Calendar.MONTH) + 1; //月份 
int date = c2.get(Calendar.DATE); //日期
int hour = c2.get(Calendar.HOUR_OF_DAY); //小时 
int minute = c2.get(Calendar.MINUTE); //分钟  
int second = c2.get(Calendar.SECOND); //秒 
int day = c2.get(Calendar.DAY_OF_WEEK); //星期几
System.out.println(“年份:” + year); 
System.out.println(“月份:” + month); 
System.out.println(“日期:” + date); 
System.out.println(“小时:” + hour); 
System.out.println(“分钟:” + minute); 
System.out.println(“秒:” + second); 
System.out.println(“星期:” + day); 

使用Calendar类中的get方法可以获得Calendar对象中对应的信息,get方法的声明如下:

public int get(int field) 

其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。需要说明的是,获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。在Calendar类中,周日是1,周一是2,周二是3,依次类推。

下面以两个简单的示例介绍时间和日期处理的基本使用。
1、计算两个日期之间相差的天数
例如计算2010年4月1号和2009年3月11号之间相差的天数,则可以使用时间和日期处理进行计算。
该程序实现的原理为:首先代表两个特定的时间点,这里使用Calendar的对象进行代表,然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以1天的毫秒数(24小时X60分钟X60秒X1000毫秒)即可获得对应的天数。实现该示例的完整代码如下:

/** 
* 计算两个日期之间相差的天数 
*/ 
public class DateExample1 { 
public static void main(String[] args) { 
//设置两个日期 
//日期:2009年3月11号 
Calendar c1 = Calendar.getInstance(); 
c1.set(2009, 3 - 1, 11); 
//日期:2010年4月1号 
Calendar c2 = Calendar.getInstance(); 
c2.set(2010, 4 - 1, 1); 
//转换为相对时间 
long t1 = c1.getTimeInMillis(); 
long t2 = c2.getTimeInMillis(); 
//计算天数 
long days = (t2 - t1)/(24 * 60 * 60 * 1000); 
System.out.println(days); 
} 
} 

2、输出当前月的月历
该示例的功能是输出当前系统时间所在月的日历,例如当前系统时间是2009年3月10日,则输出2009年3月的日历。
该程序实现的原理为:首先获得该月1号是星期几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。即如果1号是星期一,则打印一个单位的空格,如果1号是星期二,则打印两个单位的空格,依次类推。打印完星期六的日期以后,进行换行。实现该示例的完整代码如下:

/** 
* 输出当前月的日历 
*/ 
public class DateExample2{ 
public static void main(String[] args){ 
//获得当前时间 
Calendar c = Calendar.getInstance(); 
//设置代表的日期为1号 
c.set(Calendar.DATE,1); 
//获得1号是星期几 
int start = c.get(Calendar.DAY_OF_WEEK); 
//获得当前月的最大日期数 
int maxDay = c.getActualMaximum(Calendar.DATE);

               //输出标题
               System.out.println("星期日 星期一 星期二 星期三 星期四 星期五   星期六");
               //输出开始的空格
               for(int i = 1;i < start;i++){
                        System.out.print("      "); 
               }
               //输出该月中的所有日期
               for(int i = 1;i <= maxDay;i++){
                        //输出日期数字
                        System.out.print(" " + i);
                        //输出分隔空格
                        System.out.print("     ");
                        if(i < 10){
                                 System.out.print(' ');
                        }
                        //判断是否换行
                        if((start + i - 1) % 7 == 0){
                                 System.out.println();        
                        }
               }
               //换行
               System.out.println();

参考博客:http://blog.csdn.net/c15522627353/article/details/47040231

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值