Java基础-Calendar类常用方法介绍
Java基础-Calendar类常用方法介绍
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Calendar类概念
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
Calemdar类写了静态方法getInstance() 可以直接返回子类的对象,不需要直接new 子类的对象,通过静态方法直接获取。
二.Calendar类常用方法
1>.getInstance
与其他语言环境敏感类一样,Calendar
提供了一个类方法 getInstance
,以获得此类型的一个通用的对象。Calendar
的 getInstance
方法返回一个 Calendar
对象,其日历字段已由当前日期和时间初始化:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.util.Calendar; 10 11 public class CalendarDemo { 12 public static void main(String[] args) { 13 Calendar c = Calendar.getInstance(); 14 System.out.println(c); 15 } 16 } 17 18 19 /* 20 以上代码执行结果如下: 21 java.util.GregorianCalendar[time=1524043662523,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=3,WEEK_OF_YEAR=16,WEEK_OF_MONTH=3,DAY_OF_MONTH=18,DAY_OF_YEAR=108,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=27,SECOND=42,MILLISECOND=523,ZONE_OFFSET=28800000,DST_OFFSET=0] 22 */
2>.get方法
Calendar类的get方法,用于获取日历字段的值,返回值的结果也是个int类型的值。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.util.Calendar; 10 11 public class CalendarDemo { 12 public static void main(String[] args) { 13 Calendar c = Calendar.getInstance(); 14 //获取年份 15 int year = c.get(Calendar.YEAR); 16 //获取月份(月份是从0开始计数的,因此我们有必要+1) 17 int mouth = c.get(Calendar.MONTH); 18 //获取天数 19 int day = c.get(Calendar.DAY_OF_MONTH); 20 System.out.printf("%d年%d月%d日",year,mouth+1,day); 21 22 } 23 } 24 25 /* 26 以上代码执行结果如下: 27 2018年4月18日 28 */
3>.set方法
将给定的日历字段设置为给定值。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.util.Calendar; 10 11 public class CalendarDemo { 12 public static void main(String[] args) { 13 Calendar c = Calendar.getInstance(); 14 //设置月份,设置10月份(月份是以0开始计数的哟!) 15 c.set(Calendar.MONTH, 10); 16 //设置年,月,日 17 c.set(2099, 4, 19); 18 19 20 //获取年份 21 int year = c.get(Calendar.YEAR); 22 //获取月份(月份是从0开始计数的,因此我们有必要+1) 23 int mouth = c.get(Calendar.MONTH); 24 //获取天数 25 int day = c.get(Calendar.DAY_OF_MONTH); 26 System.out.printf("%d年%d月%d日",year,mouth+1,day); 27 28 } 29 } 30 31 /* 32 以上代码执行结果如下: 33 2099年5月19日 34 */
4>.add方法
日历的偏移量,可以指定一个日历中的字段,进行整数的偏移。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.util.Calendar; 10 11 public class CalendarDemo { 12 public static void main(String[] args) { 13 Calendar c = Calendar.getInstance(); 14 //获取到天数后,如果是负数就向前偏移,如果是正数就向后偏移,此处是获取到当月天数后,会在当前月份的偏移接近10个月) 15 c.add(Calendar.DAY_OF_MONTH, -280); 16 //获取年份 17 int year = c.get(Calendar.YEAR); 18 //获取月份(月份是从0开始计数的,因此我们有必要+1) 19 int mouth = c.get(Calendar.MONTH); 20 //获取天数 21 int day = c.get(Calendar.DAY_OF_MONTH); 22 System.out.printf("%d年%d月%d日\n",year,mouth+1,day); 23 } 24 } 25 26 /* 27 以上代码执行结果如下: 28 2017年7月12日 29 */
5>.getTime方法
把日历对象转换成Date日期对象。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.util.Calendar; 10 import java.util.Date; 11 12 public class CalendarDemo { 13 public static void main(String[] args) { 14 Calendar c = Calendar.getInstance(); 15 Date date = c.getTime(); 16 System.out.println(date); 17 } 18 } 19 20 /* 21 以上代码执行结果如下: 22 Wed Apr 18 17:54:17 GMT+08:00 2018 23 */
三.小试牛刀
1>.求出自己已经出生多少天
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.text.ParseException; 10 import java.text.SimpleDateFormat; 11 import java.util.Date; 12 import java.util.Scanner; 13 14 public class DateDemo { 15 16 public static void main(String[] args) throws ParseException { 17 function(); 18 } 19 20 public static void function() throws ParseException { 21 //获取出生日期,从键盘输入 22 while(true) { 23 System.out.print("请输入你的出生日期(格式:yyyy-MM-dd):>>>"); 24 String birthdayString = new Scanner(System.in).nextLine(); 25 if(birthdayString.equals("exit")) { 26 System.exit(0); 27 } 28 //创建SimpleDateFormat对象,并传入日期格式 29 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 30 //将字符串日期,转成Date对象,需要调用parse方法。 31 Date birthdayDate = sdf.parse(birthdayString); 32 //获取今天的日期对象 33 Date todayDate = new Date(); 34 //将两个日期转换成毫秒值,Date类的方法getTime 35 long birthdaySecond = birthdayDate.getTime(); 36 long todaySecond = todayDate.getTime(); 37 long day = (todaySecond - birthdaySecond)/1000/3600/24; 38 if(day<0) { 39 System.out.println("你还没有出生呢!"); 40 }else { 41 System.out.println("你已经出生了:"+day+" 天啦!"); 42 } 43 } 44 45 } 46 }
以上代码测试情况如下:
2.计算闰年
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.Demo; 8 9 import java.text.ParseException; 10 import java.util.Calendar; 11 import java.util.Scanner; 12 import java.util.regex.Pattern; 13 14 public class DateDemo { 15 16 public static void main(String[] args) throws ParseException { 17 Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); 18 while(true) { 19 System.out.print("请输入你想要计算的年份(格式:YYYY)\":>>>"); 20 String input = new Scanner(System.in).nextLine(); 21 if(input.length() == 0) { //判断用户输入的是否为整数。 22 continue; 23 }else if(input.equals("exit")) { 24 System.exit(0); 25 }else if(pattern.matcher(input).matches()) { 26 int year = Integer.valueOf(input).intValue(); 27 function(year); 28 }else { 29 System.out.println("请输入年份(格式:YYYY)"); 30 } 31 32 } 33 } 34 35 public static void function(int year) throws ParseException { 36 Calendar c = Calendar.getInstance(); 37 //将日历设置到指定年的3月1日 38 c.set(year, 2,1); 39 //日历add方法,向前偏移1天 40 c.add(Calendar.DAY_OF_MONTH, -1); 41 //get方法获取天数 42 int day = c.get(Calendar.DAY_OF_MONTH); 43 if(day == 29) { 44 System.out.printf("%d年的二月份有%d天,是闰年!\n",year,day); 45 }else { 46 System.out.printf("%d年的二月份有%d天,是平年!\n",year,day); 47 } 48 } 49 }
以上代码测试结果如下:
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/8870958.html,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。