Calendar 工具类介绍及使用

1. 简介

Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

copy
Calendar c = Calendar.getInstance();

2. 方法

2.1 set() 方法和add() 方法

copy
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calendar.getInstance(); System.out.println(sdf.format(c.getTime())); c.add(Calendar.DAY_OF_YEAR, -1); System.out.println(sdf.format(c.getTime())); c.set(2018, 12, 20);// 月份是从0开始的,所以11表示12月 c.add(Calendar.YEAR, -1); // 年份减1 c.add(Calendar.YEAR, +1); // 年份加1 c.add(Calendar.MONTH, -1);// 月份减1 c.add(Calendar.DATE, -1);// 日期减1 c.set(Calendar.HOUR, 1);//设置时为 13点 c.set(Calendar.MINUTE, 45);//设置分为 45 c.set(Calendar.SECOND, 30);//设置 秒为30 System.out.println(sdf.format(c.getTime()));

​ set() 方法是用来设置Calendar 的字段的值的,例如可以设置年月日时分秒等;add() 方法是用来对Calendar 的字段值进行计算的。如果需要减去值可以用负数值。

2.2 将时间戳转为日期数据

copy
/** * @Author lbk * @Description // 将时间戳转化为日期 * @Date 10:29 2022/3/8 * @Param * @return **/ public static String getDate(Long milliSecond) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(milliSecond); }

2.3 将日期数据转为时间戳

copy
/** * @Author lbk * @Description // 将日期数据转为时间戳 * @Date 10:19 2022/3/8 * @Param * @return **/ public static Long getMillis(String date) { Calendar instance = Calendar.getInstance(); try { instance.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date)); }catch (Exception e) { e.printStackTrace(); } return instance.getTimeInMillis(); }

2.4 获取当月第一天和当前时间时间戳

copy
/** * @Author lbk * @Description // 获取当前月份第一天的时间戳以及当前时间的时间戳 * @Date 10:42 2022/3/8 * @Param * @return Map **/ public static Map<String, Long> getMonthFirstAndCurrent() { // 初始化结果map ,用于存储当前月第一天和现在的时间戳 Map<String, Long> resMap = new HashMap<>(); Calendar calendar_first = Calendar.getInstance(); calendar_first.set(Calendar.DATE, 1); calendar_first.set(Calendar.HOUR_OF_DAY, 0); calendar_first.set(Calendar.MINUTE, 0); calendar_first.set(Calendar.SECOND, 0); resMap.put("monthFirst", calendar_first.getTimeInMillis()); Calendar calendar_current = Calendar.getInstance(); resMap.put("current", calendar_current.getTimeInMillis()); System.out.println(resMap); System.out.println(getDate(calendar_first.getTimeInMillis())); System.out.println(getDate(calendar_current.getTimeInMillis())); return resMap; } // 输出结果 - getDate 将时间戳转化为日期, Map 里面存时间戳 // 2022-03-01 00:00:00 // 2022-03-08 21:53:45

2.5 获取某年某月的月份的开始和结束时间戳

copy
/** * @Author lbk * @Description // 获取某年某月的开始时间戳和解释时间戳,区别于前面的当前时间,这里可以作为参数输入 * @Date 21:27 2022/3/8 * @Param * @return **/ public static Map<String, Long> getMonthAround(String date) { // 初始化结果map ,用于存放指定时间月份的开始时间戳和结束时间戳 Map<String, Long> resMap = new HashMap<>(); // 将输入的String 类型解析为 Date 对象一边传入Calendar 中 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); Date monthDate = null; try { monthDate = simpleDateFormat.parse(date); }catch (ParseException e) { e.printStackTrace(); } Calendar calendar_lastYearStart = Calendar.getInstance(); Calendar calendar_lastYearEnd = Calendar.getInstance(); // 设置输入时间月份的第一天 calendar_lastYearStart.setTime(monthDate); calendar_lastYearStart.set(Calendar.DAY_OF_MONTH, 1); calendar_lastYearStart.set(Calendar.HOUR_OF_DAY, 0); calendar_lastYearStart.set(Calendar.MINUTE, 0); calendar_lastYearStart.set(Calendar.SECOND, 0); // 设置输入时间月份的最后一天 calendar_lastYearEnd.setTime(monthDate); calendar_lastYearEnd.set(Calendar.DAY_OF_MONTH, calendar_lastYearEnd.getActualMaximum(Calendar.DAY_OF_MONTH)); calendar_lastYearEnd.set(Calendar.HOUR_OF_DAY, 23); calendar_lastYearEnd.set(Calendar.MINUTE, 59); calendar_lastYearEnd.set(Calendar.SECOND, 59); System.out.println(getDate(calendar_lastYearStart.getTimeInMillis())); System.out.println(getDate(calendar_lastYearEnd.getTimeInMillis())); resMap.put("lastYearStart", calendar_lastYearStart.getTimeInMillis()); resMap.put("lastYearEnd", calendar_lastYearEnd.getTimeInMillis()); return resMap; } // 2017-02-01 00:00:00 // 2017-02-28 23:59:59

2.6 获取当天的开始和结束时间戳

copy
/** * @Author lbk * @Description // 获取当天的开始时间戳和结束时间戳 * @Date 17:50 2022/3/8 * @Param * @return **/ public static Map<String, Long> getDaysBeginAndEnd() { // 初始化结果Map ,用于存储某天开始时间戳和结束时间戳 Map<String, Long> resMap = new HashMap<>(); Calendar calendar_begin = Calendar.getInstance(); Calendar calendar_end = Calendar.getInstance(); calendar_begin.set(Calendar.HOUR_OF_DAY, 0); calendar_begin.set(Calendar.MINUTE, 0); calendar_begin.set(Calendar.SECOND, 0); resMap.put("daysBegin", calendar_begin.getTimeInMillis()); calendar_end.set(Calendar.HOUR_OF_DAY, 23); calendar_end.set(Calendar.MINUTE, 59); calendar_end.set(Calendar.SECOND, 59); resMap.put("daysEnd", calendar_end.getTimeInMillis()); System.out.println(getDate(calendar_begin.getTimeInMillis())); System.out.println(getDate(calendar_end.getTimeInMillis())); return resMap; } // 2022-03-08 00:00:00 // 2022-03-08 23:59:59

2.7 获取当前周的开始和结束时间戳

copy
/** * @Author lbk * @Description // 获取当前时间所在的这个周的开始时间戳和结束时间戳 * @Date 20:49 2022/3/8 * @Param * @return **/ public static Map<String, Long> getWeeksAgoAndCurrent() { // 初始化结果Map , 用于存储这周开始的时间戳和结束时间的时间戳 Map<String, Long> resMap = new HashMap<>(); Calendar calendar_weeksAgo = Calendar.getInstance(); Calendar calendar_current = Calendar.getInstance(); // 设置当前时间所在周周日的时间 calendar_weeksAgo.set(Calendar.DAY_OF_WEEK, 1); // 一周中的第一天是周日,第七天是周六 calendar_weeksAgo.set(Calendar.HOUR_OF_DAY, 0); calendar_weeksAgo.set(Calendar.MINUTE, 0); calendar_weeksAgo.set(Calendar.SECOND, 0); resMap.put("weeksAgo", calendar_weeksAgo.getTimeInMillis()); // 设置当前时间所在周周六的时间 calendar_current.set(Calendar.DAY_OF_WEEK, 7); calendar_current.set(Calendar.HOUR_OF_DAY, 23); calendar_current.set(Calendar.MINUTE, 59); calendar_current.set(Calendar.SECOND,59); resMap.put("current", calendar_current.getTimeInMillis()); System.out.println(getDate(calendar_weeksAgo.getTimeInMillis())); System.out.println(getDate(calendar_current.getTimeInMillis())); return resMap; } // 2022-03-06 00:00:00 // 2022-03-12 23:59:59

2.8 获取去年这个月的开始时间和结束时间戳

copy
/** * @Author lbk * @Description // 获取去年这个月的开始时间和结束时间 * @Date 21:12 2022/3/8 * @Param * @return **/ public static Map<String, Long> getMonthLastYear() { // 初始化结果map ,存放去年这个月的开始时间和结束时间 Map<String, Long> resMap = new HashMap<>(); Calendar lastYearEnd = Calendar.getInstance(); Calendar lastYearStart = Calendar.getInstance(); // 设置去年月份的开始 lastYearStart.add(Calendar.YEAR, -1); lastYearStart.set(Calendar.DAY_OF_MONTH, 1); lastYearStart.set(Calendar.HOUR_OF_DAY, 0); lastYearStart.set(Calendar.MINUTE, 0); lastYearStart.set(Calendar.SECOND, 0); resMap.put("lastYearStart", lastYearStart.getTimeInMillis()); // 设置去年月份的结束 lastYearEnd.add(Calendar.YEAR, -1); lastYearEnd.set(Calendar.DAY_OF_MONTH, lastYearEnd.getActualMaximum(Calendar.DAY_OF_MONTH)); lastYearEnd.set(Calendar.HOUR_OF_DAY,23); lastYearEnd.set(Calendar.MINUTE, 59); lastYearEnd.set(Calendar.SECOND, 59); System.out.println(getDate(lastYearStart.getTimeInMillis())); System.out.println(getDate(lastYearEnd.getTimeInMillis())); return resMap; } // 2021-03-01 00:00:00 // 2021-03-31 23:59:59

3. Calendar 总览

3.1 Calendar 类的常用方法

static Calendar getInstance() 使用默认时区和区域设置获取日历。通过该方法生成Calendar对象。
public void set(int year,int month,int date,int hourofday,int minute,int second) 设置日历的年月日时分秒
public int get(int field) 返回给定日历字段的值。所谓字段就是年、月、日等等。
public Date getTime() 返回一个Date表示此日历的时间。Calendar-----Date
public void setTime(Date date) 使用给定的Date设置此日历的时间。Date------Calendar
abstract void add(int field,int amount) 按照日历的规则,给指定字段添加或减少时间量。
public long getTimeInMillies() 以毫秒为单位返回该日历的时间值。

3.2 Calendar 类中的常量

YEAR DAY_OF_WEEK_IN_MONTH 某月的第几周
MONTH 月(默认从0 开始,需加1) WEEK_OF_MONTH 一月的第几周
DAY_OF_MONTH 一个月的第几天,同DATE DAY_OF_YEAR 一年的第几天
DATE 日期 WEEK_OF_YEAR 一年的第几周
HOUR_OF_DAY 小时,24小时制 HOUR 小时,12 小时制
MINUTE 分钟 SECOND
posted @   李同学的跋涉  阅读(305)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起