一、什么是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();