(20)Java中的时间操作类(Date和Calendar)

Date类

  • 什么是Date类:java.util.Date类,在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。
  • 构造方法
  1. Date():使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象。

     Date d = new Date();
     System.out.println(d);
     //执行结果
     Mon Nov 04 11:21:43 CST 2019
     结论:在该格式中,Mon代表Monday(周一),Nov代表November(十一月),04代表4号,CST代表China Standard Time(中国标准时间,也就是北京时间(东八区))。
    
  2. Date(int year, int month, int date):Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。 - - ->已过时

     	Date d = new Date(2019 - 1900,11 - 1,4);
     	System.out.println(d);
     	//执行结果
     	Mon Nov 04 00:00:00 CST 2019
     **注意:Date类中,年份减去1900,月份为0-11,所以输入的实际月份要减去1。**
    
  3. Date(long date):传递一个毫秒数,获取这个毫秒数所对应的当前时间。

  • 常用方法
  1. getYear():年份,得到的年份是減去了1900的,所以最后的结果必须加上1900。- - ->已过时

  2. getMonth():月份,Java中月份是0-11,所以得到的月份必须加上1才等于实际月份。 - - ->已过时

  3. getDate():日期 - - ->已过时

  4. getHours():小时 - - ->已过时

  5. getMinutes():分钟 - - ->已过时

  6. getSeconds():秒 - - ->已过时

  7. getDay():星期,0 = Sunday(日), 1 = Monday(一), 2 = Tuesday(二), 3 = Wednesday(三), 4 = Thursday(四), 5 = Friday(五), 6 = Saturday(六)。 - - ->已过时

  8. getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 到目前的毫秒数。


Calendar类

  • 什么是Calendar类:java.util.Calendar类,从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

  • 常用字段(一般用作方法中field参数)

  1. Calendar.YEAR——年份

  2. Calendar.MONTH——月份。与Date类相同,为0-11。

  3. Calendar.DATE——日期

  4. Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同

  5. Calendar.HOUR——12小时制的小时数

  6. Calendar.HOUR_OF_DAY——24小时制的小时数

  7. Calendar.MINUTE——分钟

  8. Calendar.SECOND——秒

  9. Calendar.DAY_OF_WEEK——星期几。在Calendar类中,星期是1-7,周日是1,周一是2,周二是3,依次类推。

  • 常用方法
  1. getInstance():由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

  2. public final void set(int year,int month,int date):设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。

  3. set(int year, int month, int date, int hourOfDay, int minute):设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。

  4. set(int year, int month, int date, int hourOfDay, int minute, int second):设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

  5. set(int field, int value):将给定的日历字段设置为给定值。

  6. public int get(int field):返回给定日历字段的值。其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。

     	//举例:设置时间与获得Calendar类中的信息
     	Calendar c2 = Calendar.getInstance();
     	//设置时间方法1:直接调用上述2、3、4中方法填写。
     	//方法2:调用5中的set(int field, int value)方法
     	c2.set(Calendar.YEAR, 1996);
     	c2.set(Calendar.MONTH, 10-1);
     	c2.set(Calendar.DAY_OF_MONTH, 28);
     	c2.set(Calendar.HOUR, 1);
     	c2.set(Calendar.MINUTE, 2);
     	c2.set(Calendar.SECOND, 50);
     	//获取信息
     	//年份
     	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);
     	//星期几,1-7,星期要减去一,变成0-6
     	int day = c2.get(Calendar.DAY_OF_WEEK) - 1;
     	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);
     	//执行结果
     	年份:1996
     	月份:10
     	日期:28
     	小时:1
     	分钟:2
     	秒:50
     	星期:2
    
  7. public abstract void add(int field,int amount):该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少时amount的值为负。

     	Calendar c3 = Calendar.getInstance();
     	c3.add(Calendar.DATE, 10);
     	int year1 = c3.get(Calendar.YEAR);
     	//月份
     	int month1 = c3.get(Calendar.MONTH) + 1;
     	//日期
     	int date1 = c3.get(Calendar.DATE);
     	System.out.println(year1 + "年" + month1 + "月" + date1 + "日");
     	//执行结果
     	2019年11月14日
     	结果解释:这里add方法是指在c3对象的Calendar.DATE,也就是日期字段上增加10,类内部会重新计算该日期对象中其它各字段的值,从而获得10天以后的日期
    
  8. public boolean after(Object when):该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。

     	Calendar c4 = Calendar.getInstance();
     	c4.set(2019, 10 - 1, 10);
     	Calendar c5 = Calendar.getInstance();
     	c5.set(2020, 10 - 1, 10);
     	boolean b = c5.after(c4);
     	System.out.println(b);
     	//执行结果
     	true
     结果解释:在该示例代码中对象c4代表的时间是2019年10月10号,对象c5代表的时间是2020年10月10号,则对象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。
    
  9. public boolean before(Object when):该方法是判断当前日期对象是否位于另外一个日期对象之前。

  10. public final Date getTime():该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。

  11. public final void setTime(Date date):该方法的作用是将Date对象转换为对应的Calendar对象

时间格式化类

  • 什么是时间格式化类:SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

      例如:
      new SimpleDateFormat("yyyy年MM月dd日").format(Calendar.getInstance().getTime())
    

End

下一章,(21)Java中的字符串类的使用

发布了67 篇原创文章 · 获赞 19 · 访问量 9887

猜你喜欢

转载自blog.csdn.net/qq_41530004/article/details/102896189