Calendar类

平时用到时间戳主要是用java.sql.Timestamp这个类,但是Timestamp获取年月日时分秒的方法现在都标注不推荐了,为了防止官方哪天突然给他删了,可以用Calendar类做一些替代操作。

Calendar对象初始化

Calendar cal = Calendar.getInstance(); // 返回一个基于当前时间和默认时区、区域设置的日历对象

日历一般配合时间戳使用,所以还需要设置时间

cal.setTime(timestamp);           //这里的timestamp可以是任意一个Date格式的对象

这个方法的本质是把timestamp的毫秒数赋给cal,所以以下操作可以达到相同效果

cal.setTimeInMillis(timestamp.getTime());

Calendar对象常用方法

//获取时间
Date time = cal.getTime();//date=Sun Jan 27 16:27:27 CST 2019//获取年
int year = cal.get(Calendar.YEAR);                     //year=2019//获取月份 Calendar.MONTH从0开始(1月是0,12月是11) ,使用时通常会+1
int month = cal.get(Calendar.MONTH) + 1;              //month=1//获取当前是本月的第多少天:两种方法等价
int day_of_month = cal.get(Calendar.DAY_OF_MONTH);     //day_of_month=27
int day = cal.get(Calendar.DATE);                          //day=27//获取当月天的最大值,即当月有多少天
int max_day_of_month = cal.getActualMaximum(Calendar.DAY_OF_MONTH);    //max_day_of_month=31//获取当前小时(24小时制)
int hour24 = cal.get(Calendar.HOUR_OF_DAY);                //hour24=16
//12小时制
int hour12 = cal.get(Calendar.HOUR);                   //hour12=4//获取当前:分钟
int minute = cal.get(Calendar.MINUTE);                 //minute=27//当前秒
int second = cal.get(Calendar.SECOND);                 //second=27//星期几:用数字(1~7)表示(星期日~星期六),使用时通常会-1
int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 1;   //day_of_week=0//上午-0;下午-1
int amOrPm = cal.get(Calendar.AM_PM);                      //amOrPm=1//当前年的第几周
int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);     //week_of_year=5//当前月的星期数
int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);   //week_of_month=5//当前月中的第几个星期
int day_of_week_in_month = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH); //day_of_week_in_month=4//当前年的第几天
int day_of_year = cal.get(Calendar.DAY_OF_YEAR);       //day_of_year=27

注意项

Calendar有很多方法都是复用的,比如get()方法和getActualMaximum()方法,传入的参数是一个用来区分要调用的功能的整形。所以如果想用getActualMaximum()方法获得一个月的最大天数,即:

int actualMaximum = cal.getActualMaximum(Calendar.DAY_OF_YEAR);//一年最大天数
actualMaximum = cal.getActualMaximum(Calendar.DAY_OF_MONTH);//一月最大天数

但如果想要获取下个月的最大天数,就不能直接:

actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH+1);

Calendar.DAY_OF_MONTH(DATE)的值是一个定值5,所以加1后传入的值为6,等效于DAY_OF_YEAR,最后会返回给actualMaximum一个值365(或366),如果想要获取时间戳所指向的下一个月或年的最大天数,应该:

cal.add(Calendar.MONTH,1);
actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

这个操作是给当前日历对象cal所指向的月份+1,想操作年份或天数的话同理将Calendar.MONTH替换成Calendar.YEAR或Calendar.DAY_OF_YEAR即可,同理,如果想获取的是上一个月的,给月数-1即可:

cal.add(Calendar.MONTH,-1);
actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  • 综上,形如Calendar.DAY_OF_MONTH的参数起到的其实是一个类似枚举类的作用,用来标识在调用某个可复用方法时实际想要使用的方法。

Calendar类常用方法,获取每月最大天数相关推荐

  1. Calendar类常用方法 日期间的转换 set方法有巨坑

           今天发现项目的工具类方法有个bug,而且还能迷惑你的bug,刚开始也是很迷惑,因为这个bug之前出现过,但是过了两天就自己好了,今天又出现了,哦对,今天是 2017年3月31日,之所 ...

  2. Calendar类常用方法

    概念 java.util.Claendar日历类,抽象类,在Date类后出现的,替换掉了很多Date类中的方法,该类将所有的可能用到的时间信息封装为静态成员变量,通过类名.静态成员变量获取时间字段值 ...

  3. java Date days_JAVA的Date类与Calendar类(常用方法)

    念念不忘,必有回响 http://blog.csdn.net/xiaopihai86/article/details/50827945 1.用Java.util.Calender来实现 Calenda ...

  4. python获取本月天数_Python从程序中用户的输入中获取每月的天数

    这就是我要做的: 用户将按顺序输入年.月数(1-12)和日数.程序将确定日期是在将来还是在过去.(如果输入的日期是今天的日期,则假定该日期是过去的日期).未来的约会是尚未发生的日期.如果今天是7月31 ...

  5. Calendar类的常用方法分享

    Calendar类常用方法分享 Calendar类 一些常用的方法 附上一些常用field Calendar类 该类是在java.util包下,是一个abstract修饰的类,不能通过new的方式获取 ...

  6. Calendar类-日历类常用方法(JAVA)

    Calendar类概述 ​ Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法 ​ Calendar 提供了一个类方法 getInstance 用于获取 ...

  7. java获取calendar_java--获取当前时间(Calendar类)

    用Calendar类来获取当前的时间 代码: import java.util.Calendar; public class CalendarDemo { /** * @param args */ p ...

  8. Java日期相关类:Date、SimpleDateFormat和Calendar类常用API代码示例

    Date: 表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间 Date类的构造方法 Date() :创建的是一个表示当前系统时间的Date对象 Date(long ...

  9. java -Date、DateFormat、Calendar类

    Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 毫秒概念:1000毫秒=1秒 毫秒的0点: System.currentTimeMillis()  相当于Date d = new Date ...

最新文章

  1. R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行center中心化、scale标准化(每个数据列减去平均值、除以标准差)、设置参数为center和scale
  2. 使用bc45编译ucos-II的配置过程
  3. android相关使用工具
  4. [postgresql] postgresql 安装
  5. WordPress Restful API registration to Kyma WordPress API注册到Kyma的实现原理
  6. Linux下查看文件和文件夹大小的df和du命令(链接)
  7. cgi php脚本运行超时间,php超时 - php-cgi调用外部程序超时,但php在命令行模式下能完整运行外部程序...
  8. Cartographer—ROS中的安装
  9. ubuntu之解决挂载NTFS磁盘时出现input/output error
  10. 《大师谈游戏设计——创意与节奏》【笔记一】
  11. Kafka | Kafka中如何实现死信队列重试队列
  12. 怎么关闭fcitx的简繁切换和vscode的查找快捷键冲突了
  13. 基于Revel开发的组件化代码生成器
  14. linux下xz格式,linux下 x.tar.xz格式文件的解压方法
  15. 用matlab绘制P三曲线,科学网—水文频率曲线及MATLAB绘制 - 张凌的博文
  16. OPENSTACK-210-3-配置网络(Configure networking)-命令行
  17. 半年销售100万辆 关注比亚迪后300万时代
  18. 【C# 教程系列第 11 篇】什么是抽象类、抽象方法
  19. Org-mode + GitHub 搭建自己的云笔记
  20. Stm32MP157-Linux(Ubuntu)——Ubuntu入门

热门文章

  1. 在Postman中使用不受信任的SSL证书(转)
  2. java程序员学习路线图
  3. 使用VC和MATCOM结合开发应用程序心得笔记
  4. 2022,AIGC元年?
  5. spring中对浏览器缓存的控制
  6. 基于vue element-ui 的省市区数据结构 省市区三级联动数据---
  7. ZBrush - 角色中的弯曲操作
  8. 讨论:程序员高手和菜鸟的区别是什么?
  9. wifi万能秘钥,也搞了个自媒体平台,你怎么看?
  10. 【PAT乙级】挖掘机技术哪家强