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 对象,其日历字段已由当前日期和时间初始化:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.util.Calendar; public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);
}
} /*
以上代码执行结果如下:
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]
*/
2>.get方法
Calendar类的get方法,用于获取日历字段的值,返回值的结果也是个int类型的值。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.util.Calendar; public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//获取年份
int year = c.get(Calendar.YEAR);
//获取月份(月份是从0开始计数的,因此我们有必要+1)
int mouth = c.get(Calendar.MONTH);
//获取天数
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.printf("%d年%d月%d日",year,mouth+1,day); }
} /*
以上代码执行结果如下:
2018年4月18日
*/
3>.set方法
将给定的日历字段设置为给定值。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.util.Calendar; public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//设置月份,设置10月份(月份是以0开始计数的哟!)
c.set(Calendar.MONTH, 10);
//设置年,月,日
c.set(2099, 4, 19); //获取年份
int year = c.get(Calendar.YEAR);
//获取月份(月份是从0开始计数的,因此我们有必要+1)
int mouth = c.get(Calendar.MONTH);
//获取天数
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.printf("%d年%d月%d日",year,mouth+1,day); }
} /*
以上代码执行结果如下:
2099年5月19日
*/
4>.add方法
日历的偏移量,可以指定一个日历中的字段,进行整数的偏移。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.util.Calendar; public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//获取到天数后,如果是负数就向前偏移,如果是正数就向后偏移,此处是获取到当月天数后,会在当前月份的偏移接近10个月)
c.add(Calendar.DAY_OF_MONTH, -280);
//获取年份
int year = c.get(Calendar.YEAR);
//获取月份(月份是从0开始计数的,因此我们有必要+1)
int mouth = c.get(Calendar.MONTH);
//获取天数
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.printf("%d年%d月%d日\n",year,mouth+1,day);
}
} /*
以上代码执行结果如下:
2017年7月12日
*/
5>.getTime方法
把日历对象转换成Date日期对象。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.util.Calendar;
import java.util.Date; public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
Date date = c.getTime();
System.out.println(date);
}
} /*
以上代码执行结果如下:
Wed Apr 18 17:54:17 GMT+08:00 2018
*/
三.小试牛刀
1>.求出自己已经出生多少天
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; public class DateDemo { public static void main(String[] args) throws ParseException {
function();
} public static void function() throws ParseException {
//获取出生日期,从键盘输入
while(true) {
System.out.print("请输入你的出生日期(格式:yyyy-MM-dd):>>>");
String birthdayString = new Scanner(System.in).nextLine();
if(birthdayString.equals("exit")) {
System.exit(0);
}
//创建SimpleDateFormat对象,并传入日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//将字符串日期,转成Date对象,需要调用parse方法。
Date birthdayDate = sdf.parse(birthdayString);
//获取今天的日期对象
Date todayDate = new Date();
//将两个日期转换成毫秒值,Date类的方法getTime
long birthdaySecond = birthdayDate.getTime();
long todaySecond = todayDate.getTime();
long day = (todaySecond - birthdaySecond)/1000/3600/24;
if(day<0) {
System.out.println("你还没有出生呢!");
}else {
System.out.println("你已经出生了:"+day+" 天啦!");
}
} }
}
以上代码测试情况如下:

2.计算闰年
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.Demo; import java.text.ParseException;
import java.util.Calendar;
import java.util.Scanner;
import java.util.regex.Pattern; public class DateDemo { public static void main(String[] args) throws ParseException {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
while(true) {
System.out.print("请输入你想要计算的年份(格式:YYYY)\":>>>");
String input = new Scanner(System.in).nextLine();
if(input.length() == 0) { //判断用户输入的是否为整数。
continue;
}else if(input.equals("exit")) {
System.exit(0);
}else if(pattern.matcher(input).matches()) {
int year = Integer.valueOf(input).intValue();
function(year);
}else {
System.out.println("请输入年份(格式:YYYY)");
} }
} public static void function(int year) throws ParseException {
Calendar c = Calendar.getInstance();
//将日历设置到指定年的3月1日
c.set(year, 2,1);
//日历add方法,向前偏移1天
c.add(Calendar.DAY_OF_MONTH, -1);
//get方法获取天数
int day = c.get(Calendar.DAY_OF_MONTH);
if(day == 29) {
System.out.printf("%d年的二月份有%d天,是闰年!\n",year,day);
}else {
System.out.printf("%d年的二月份有%d天,是平年!\n",year,day);
}
}
}
以上代码测试结果如下:

Java基础-Calendar类常用方法介绍的更多相关文章
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- java基础-BigInteger类常用方法介绍
java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...
- java基础-Arrays类常用方法介绍
java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...
- java基础-Math类常用方法介绍
java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...
- java基础-System类常用方法介绍
java基础-System类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.System类概念 在API中system类介绍的比较简单,我们给出定义,system中 ...
- java基础-Integer类常用方法介绍
java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
- Java基础-Date类常用方法介绍
Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...
- java基础-Eclipse开发工具介绍
java基础-Eclipse开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 所谓工欲善其事必先利其器,即将身为一名Java开发工程师怎么能没有一款好使的IDE呢?今天就 ...
- java基础-Idea开发工具介绍
java基础-Idea开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前给大家介绍过一款Java的IDE叫eclipse,有些功能用起来不是很得心应手,尤其是在导报的 ...
随机推荐
- 20172329 2018-2019-2 《Java软件结构与数据结构》实验二报告
20172329 2018-2019-2 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...
- 20162328蔡文琛 大二week07
20162328 2017-2018-1 <程序设计与数据结构>第7周学习总结 教材学习内容总结 树是非线性结构,其元素组织为一个层次结构. 树的度表示树种任意节点的最大子节点数. 有m个 ...
- binding(转)
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- beat冲刺(5/7)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(5/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作中 数据集标注 接下来的计划 制作p ...
- “吃神么,买神么”的第三个Sprint冲刺总结
第三阶段Spring的目标以及完成情况: 时间:6.16——6.26(10天) 目标:第三阶段主要是前台设计的修改完善,以及数据库成功连接,完成小部分功能 情况:前台界面完善,完成小部分功能(发布功能 ...
- Week2-作业1
第一章:引用:如果一架民用飞机上有一个功能,用户使用它的概率是百万分之一,你还要做这个功能么? 选择之后,这个功能是什么呢?谜底是飞机的安全功能. 个人认为,飞机的安全功能这个 ...
- 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (五) 树莓派单子节点发送数据
本项目中各个节点和树莓派的通信不区分信道,因此如果由树莓派发送给特定节点的数据会被所有节点接收到,因此子节点可以判别该数据是否发给自己的,需要在数据的第二个字节中加入目标节点的编号(第一个字节为源节点 ...
- [转帖]真TM长的:SQL Server 2008存储结构——GAM和SGAM、PFS结构、IAM结构、DCM&BCM
谈到GAM和SGAM,我们不得不从数据库的页和区说起. https://blog.csdn.net/snowfoxmonitor/article/details/49991015 一个数据库由用户定义 ...
- 错误“AxImp.exe”已退出,代码为 -1163019603【转载及个人看法】
http://blog.csdn.net/duguduchong/article/details/17166123 最近使用vs2010 在重新生成解决方案的时候出现 “AxImp.exe”已退出, ...
- git bash使用(markdown版)
前言 我是通过这个来学习的.个人愚笨,琢磨了半天,终于搞通了,醉了醉了,以前一直使用svn,用git确实有点水土不服.本文以如何使用git为主来展开,不涉及太多理论. git是分布式的版本管理.什么叫 ...