Java中的Date和Calendar

一、什么是Date类?

从字面上理解,Date类其实就是与时间挂钩的一个类,将时间日期这些值封装成了对象。

二、Date类可以做什么用?

封装时间日期成Date对象可以方便对其中的各个字段进行操作(年月日等),然而这个对象的很多方法都过时了,本身也不是特别方便,现在常用Calendar对象

三、如何使用Date对象

1、通过解析long型的的毫秒值数据来new一个Date对象,毫秒值从历史上某个时间点计算

1 long time = System.currentTimeMillis();//获取当前时间,返回毫秒值
2 
3 Date date = new Date();//将当前日期和时间封装成Date对象。
4 System.out.println(date);
5 
6 Date date2 = new Date(time);//将指定毫秒值封装成Date对象。
7 System.out.println(date2);

2、以上的封装的Date对象显示出来的时间日期不够友好风格,因此可以用日期格式器DateFormat

1 Date date = new Date();//获取当前时间的Date对象
2 
3 //1、先要创建一个日期时间格式器,通过LONG,SHORT,FULL等字段定义日期时间格式器风格
4 DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
5 
6 //2、通过日期时间格式器操作Date对象,返回一个字符串,即为默认风格的日期时间
7 String str_date = dateFormat.format(date);
8 
9 System.out.println(str_date);//2016年4月13日 下午07时29分35秒

 3、但是这样仍然不够方便,有时候我们想要自定义风格,比如yy##MM##DD之类的。此时使用

1 DateFormat dateFormat = new SimpleDateFormat("yyyy--MM--dd");//SimpleDateFormat中的字符串即日期格式
2 
3 String str_date = dateFormat.format(date);
4 
5 System.out.println(str_date);//2016--04--13

由于DateFormat类是抽象类,因此没有办法new对象,格式器的风格都是固化的没办法变化。因此使用其子类SimpleDateFormat对象,它的构造方法中通过Pattern字符串来新建自定义格式器,其中特定字符对照如下 

5、当我们在互联网上键入一个时间日期,这个时候服务器获得的是字符串,如果要对其中的年月日操作,就需要解析成Date对象,因此需要从字符串parse回Date。同样需要使用日期格式器作为转换桥梁

1 String str_date = "2012年4月19日";
2         
3 //1、创建日期格式器,指定特定的日期格式
4 DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd");
5 //2、调用格式器的parse方法将字符串转换成Date对象        
6 Date date = dateFormat.parse(str_date);
7         
8 System.out.println(date);//Thu Apr 19 00:00:00 CST 2012

四、使用Calendar对象代替Date对象

1、这也是一个抽象类,因此需要使用静态方法来获取Calendar实例

 1 public static void main(String[] args) {
 2         //1、通过getInstance方法将当前时间封装成Calendar对象
 3     Calendar c = Calendar.getInstance();
 4 
 5     showDate(c);//2016年4月13日星期三
 6 }
 7 
 8 public static String getWeek(int i) {
 9     
10     String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
11     
12     return weeks[i];//通过i返回星期几的字符串,星期日为一周的第一天
13 }
14 public static void showDate(Calendar c) {
15         //2、通过返回Calendar对象的字段值来获取年月日的值,然后任意指定输出格式
16     int year = c.get(Calendar.YEAR);
17     int month = c.get(Calendar.MONTH)+1;//0表示1月,因此这里要+1
18     int day = c.get(Calendar.DAY_OF_MONTH);//获取一月中的天数
19     int week = c.get(Calendar.DAY_OF_WEEK); //获取星期

 2、我们也可以从Date、毫秒值等来设置一个Calendar

1 //1、创建一个Calendar对象
2 Calendar c = Calendar.getInstance();
3 //2、通过毫秒值设定时间
4 c.setTimeInMillis(1335671230671l);//2012年4月29日星期日
5 //通过日期创建Calendar
6 c.setTime(new Date(223567456471l));//1977年1月31日星期一
7 
8 showDate(c);

还可以用set方法设置Calendar对象的各个字段值,以自定义时间日期 

3、如果要将字符串转化成Calendar对象,可以先将其通过SimpleFormat对象转化成Date对象,再用来新建一个Calendar对象

Scanner s = new Scanner(System.in);

System.out.println("请输入一个日期");

String strDate = s.nextLine();
//1、新建一个DateFormat对象,通过SimpleDateFormat对象创建格式器
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
//2、调用该格式器的parse方法转换字符串
Date d = df.parse(strDate);
//3、获得的Date对象用来新建Calendar对象
Calendar c = Calendar.getInstance();
c.setTime(d);
//4、或得Days_OF_YEAR来获取一年中的第几天
int doy = c.get(Calendar.DAY_OF_YEAR);

System.out.println(strDate + "这是一年中的第" + doy + "天!");

s.close();
原文地址:https://www.cnblogs.com/njupt-Qsimple/p/5388675.html