因为项目中要处理一些日期,就将Calendar的一些常用方法总结出来。
package com.shang;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Calendar工具类
*
* @author shang
* @date 2019年3月20日
*/
public class CalendarUtil {
public static void main(String[] args) {
// 基础方法
Calendar cal = Calendar.getInstance();// 定义Calendar对象
int year = cal.get(Calendar.YEAR);// 获取年份
int month = cal.get(Calendar.MONTH) + 1;// 获取月份(月份的范围是0-11,这里+1)
int day = cal.get(Calendar.DAY_OF_MONTH);// 获取天
int hour = cal.get(Calendar.HOUR_OF_DAY);// 获取时(24小时制)
int minute = cal.get(Calendar.MINUTE);// 获取分
int second = cal.get(Calendar.SECOND);// 获取秒
int week = cal.get(Calendar.DAY_OF_WEEK);
int allDays = cal.get(Calendar.DAY_OF_YEAR);// 获取一年的第多少天
Date nowTime = cal.getTime();
System.out.print(
"当前时间为:" + year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + " " + week);
System.out.println(" 是" + year + "的第" + allDays + "天。");
System.out.println("当前时间为" + nowTime);
System.out.println("2019年3月最后一天是:" + getLastDayOfMonth(2019, 3));
System.out.println("2019-3-20是"+dateToWeek("2019-3-20"));
System.out.println("2019-3-20的前5天是:"+getAfterOrAgoDay("2019-3-20", -5));
System.out.println("2016-3-28后两年的今天是:"+getAgoOrAfterYear("2016-3-28", +2));
}
/**
* 获取某年某月的最后一天
*
* @param year 年份
* @param month 月份
* @return 最后一天的日期
*/
public static String getLastDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();// 获取对象
cal.set(Calendar.YEAR, year); // 设置年份
cal.set(Calendar.MONTH, month - 1);// 设置月份
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取某月最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay); // 设置日历中月份的最大天数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 创建SimpleDateFormat对象
String lastDayOfMonth = sdf.format(cal.getTime());// 格式化日期
return lastDayOfMonth;
}
/**
* 根据日期获取星期几
* @param time String类型的日期(eg:2019-2-20)
* @return 星期几
*/
public static String dateToWeek(String time) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义SimpleDateFormat
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };//定义数组
Calendar cal = Calendar.getInstance(); // 获得一个日历
Date date = null;
try {
date = sdf.parse(time);//将String类型日期转化为Date类型
cal.setTime(date);//将日历设置为指定日期
} catch (ParseException e) {
e.printStackTrace();
}
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;//获取指定日期对应的数值
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* 获取几天前或者几天后的日期
* @param dateTime 基准日期
* @param n (eg: -3 前三天 ;+5 后五天)
* @return
* @throws ParseException
*/
public static String getAfterOrAgoDay(String dateTime,int n) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义SimpleDateFormat对象
Calendar cal = Calendar.getInstance();//定义Calendar对象
try {
cal.setTime(sdf.parse(dateTime));//将日期转化为date类型
} catch (ParseException e) {
e.printStackTrace();
}
cal.add(Calendar.DATE, n); //设置要获取的日期
String time =sdf.format(cal.getTime());//格式化
return time;
}
/**
* 获取几年前或者几年后的今天
*
* @param dateTime 指定日期
* @param n
* @return
*/
public static String getAgoOrAfterYear(String dateTime, int n) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义SimpleDateFormat对象
Calendar cal = Calendar.getInstance(); //定义Calendar对象
Date date = null;
try {
date = sdf.parse(dateTime); //将日期转化为Date格式
} catch (ParseException e) {
e.printStackTrace();
}
cal.setTime(date); //设置指定日期
cal.add(Calendar.YEAR, n); //设置指定年份(几个月前和几个月后的这一天类似cal.add(Calendar.MONTH,n))
String time = sdf.format(cal.getTime());//格式化
return time;
}
}
运行结果: