1.Date类
在util包中
public class Date,因此是可以通过构造函数来创建对象的
a:常用的两个构造函数:
1)Date date = new Date();
2)long time = 12313018203180L; Date date2 = new Date(time);
b:常用函数:
date.getTime(); //将Date对象转换成毫秒值 //1489110935579
若直接输出Date对象的话,结果则是系统中的保存时间的格式:Fri Mar 10 09:21:31 CST 2017
其余的很多函数都已经过时了,目前不用了.
1 //第一种是无参构造函数 new Date() 2 //获取当前的系统的Date对象 3 Date date1 = new Date(); 4 //Fri Mar 10 14:29:56 CST 2017 5 System.out.println(date1); 6 //1489127396584 7 System.out.println(date1.getTime());
1 //第二种是有参构造函数 new Date(long time) 2 //指定一个毫秒时 3 long time2 = 1489173862093L; 4 //根据指定的毫秒数获取一个Date对象 5 Date date2 = new Date(time2); 6 //Fri Mar 10 09:21:31 CST 2017 7 System.out.println(date2);
-----------------------------------------------------------------
2.DateFormat类
DateFormat属于text包下
public abstract class DateFormat
因为是抽象类,不能使用new来创建对象,使用getInstance函数获取对象
两个函数
1)format
用来将系统中默认的时间格式转换为标准化的格式:yyyy-MM-dd HH:mm:ss(即系统默认格式)
String newDate = df.format(date)
返回的是string类型
1 //演示format函数 2 Date date1 = new Date(712983719379L); 3 DateFormat df = DateFormat.getDateTimeInstance(); 4 //将获取的日期格式化为标准的格式 5 String date2 = df.format(date1); 6 //Wed Aug 05 11:01:59 CST 1992 7 System.out.println(date1); 8 //1992-8-5 11:01:59 9 System.out.println(date2); 10 System.out.println("------------");
-----------------------------------------------------------------------------
2)parse
将对应默认格式的format时间转换成系统中的时间
与format是一个恰恰相反的过程
注意:要进行异常的捕获,若输入的时间格式不正确的话,要输出提示客户;eclipse很人性化,不捕获的话,会直接报错提示
Date newDate = df.parse(strDate);
返回的是date对象
1 //演示parse函数 2 String strDate = "2017-03-10 17:51:32"; 3 try { 4 //将标准时间转化为系统中的时间 5 //Fri Mar 10 17:51:32 CST 2017 6 Date newDate = df.parse(strDate); 7 System.out.println(newDate); 8 } catch (ParseException e) { 9 System.out.println("您输入的日期的格式是不正确的!!"); 10 } 11 12 }
---------------------------------------------------------
3.SimpleDateFormat类
public class SimpleDateFormat extends DateFormat
是DateFormat的子类
这是个自定义的格式化解析器,能够将系统中的时间转化为用户自定义的时间格式,或是将自定义的时间格式转化为系统时间
注意:月份0-11 一周从周日开始
不是抽象类了,可以使用构造方法进行创建对象
常用的有两个构造函数:
1)SimpleDateFormat();
2)SimpleDateFormat(String pattern);
常用的函数:
1)format
2)parse:使用parse函数的时候,同样也需要对异常进行捕获
区别:
与DateFormat的区别:SimpleDateFormat可以1)将Date对象转换成自定义的时间格式 2)将自定义的时间格式解析成系统中的时间形式
以下演示下两种函数的使用:
1 //使用带string参数的构造函数 2 //演示format函数 3 Date date = new Date(); 4 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); 5 String newDate = sdf1.format(date); //返回的是string类型的 6 //2017年03月10日 20时08分27秒 7 System.out.println(newDate);
------------------------------------------------------
1 //演示parse函数 2 //将自定义的strDate时间转换成系统时 3 String strDate="2016/09/10 13时17:20秒"; 4 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH时mm:ss秒"); 5 try { 6 Date newDate2 = sdf2.parse(strDate); 7 System.out.println(newDate2); 8 } catch (ParseException e) { 9 // TODO Auto-generated catch block 10 e.printStackTrace(); 11 }
-----------------------------------------------------
使用SimpleDateFormat的一个小练习:
计算 "2014-08-09 09:09:09" 与 "2026年08/01 10:10:10" 相差多少个月(年)。
分析:
直接相减肯定是不行的,因此考虑到:
1)先将两个时间通过SimpleDateFormat解析成Date对象
2)调用getTime()函数,获取对应的时间的毫秒时
3)将两个时间相减,最后计算得出相差的时间
1 String s1 = "2014-08-09 09:09:09"; 2 String s2 = "2026年08/01 10:10:10"; 3 //将这两个时间解析 4 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 5 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM/dd HH:mm:ss"); 6 try { 7 //将s1转换为系统时 8 Date date1 = sdf1.parse(s1); 9 long time1 = date1.getTime(); 10 //将s2转换为系统时 11 Date date2 = sdf2.parse(s2); 12 long time2 = date2.getTime(); 13 //为确保temp为正值,要使用Math中的abs函数 14 long temp = Math.abs(time1-time2); 15 //获得了毫秒时之后,相差多少个月,年等等都可以计算了 16 long time = temp/1000/3600/24/31; 17 System.out.println(time); 18 } catch (ParseException e) { 19 System.out.println("格式不正确"); 20 }
----------------------------------------------------------------------------
4.Calendar类
在util包下
public abstract class Calendar
抽象类,因此需要通过getInstance函数获取对象
Calendar中的内容是存放在Map集合中的,因此可以通过键来获取Map中存储的对应的数据.--->get(Calendar....)
几个比较重要的函数:
1)add(Calendar.YEAR,-3); 若add后面的这个参数是赋值的话,则表示时间往前倒推.例如,12月份,减1的话,就设置了当前的月份是11,依次类推
2)set(year,month,day,.....);
注意一下:在底层的源代码中,这些通过Calendar获取的年份的值,月份的值,都是有一个初始化值的.例如,若直接输出
System.out.println(Calendar.DAY_OF_MONTH),最后得出的值是5.
WHY:源码中是这样的.
public final static int DAY_OF_MONTH = 5; 其它的也都是有默认的初始化值的
结论:要想输出正确的日期数等等数据,一定要先使用get函数进行获取,否则输出的一律都是源码中的默认值(不用担心,eclipse不会报错并且在源码都
有相对应的初始化值)
日期的输出的演示:
1 Calendar c = Calendar.getInstance(); 2 int year = c.get(Calendar.YEAR); 3 int month = c.get(Calendar.MONTH)+1; 4 int day = c.get(Calendar.DAY_OF_MONTH); 5 //2017年3月10日 6 System.out.println(year + "年" + month + "月" + day + "日");
--------------------------------------------------------------
关于Calendar的一个小练习:
使用最有效的方式获取指定年份中2月的最大天数。
分析:
1)要获取某一年的2月份有多少天的话,如果具体的按照平年和闰年来进行编程的话,程序会比较复杂;
2)考虑到Calendar中有一个add函数,add(int field, int amount).可以通过更改第二个参数的值,来得到任意的一天.
3)因此,可以考虑将3月1日的时间,往前倒推一天.这样得到的就是2月的最后一天
4)DAY_OF_MONTH可以得到到底是28天还是29天
1 public static void main(String[] args) { 2 //假设获取从1500年-2050年之间的2月份的天数 3 for(int year = 1500;year <= 2050;year++){ 4 //将日期设置为区间之间的year 5 //set(int year, int month, int date).将时间设置为3月1日 6 //通过Calendar的对象来调用set函数 7 //静态调用getInstance,获取对象 8 Calendar c = Calendar.getInstance(); 9 c.set(year,2,1); 10 //将时间往前倒推一天 11 c.add(Calendar.DAY_OF_MONTH, -1); 12 //获取2月的天数 13 int day = c.get(Calendar.DAY_OF_MONTH); 14 System.out.println(year + "年的2月有" + day + "天!"); 15 } 16 }
原文:http://www.cnblogs.com/leevanes/p/6533626.html