一、java 中的Calendar日历类解析
Calendar类是一个抽象类public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
,它为特定时间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。就是可以利用它来获得自己想要的时间,可以是指定的过去的时间,也可以是将来的时间,或者是经过计算之后的时间。总之就是用来获取时间的。
瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970年1月1日的 00:00:00.000,格里高利历)的偏移量。
使用Calendar类之前,要先知道Calendar的一些方法取回的数字是对应于Calendar本身的常数。
要使用Calendar就必须先用getInstance()取得一个Calendar的实例,例如:Calendar rightNow = Calendar.getInstance();
如果想知道当前的年份,可用rightNow.get(Calendar.YEAR) 获得。
如果想知道当前的月份:rightNow.get(Calendar.MONTH)获得。
这时是返回的是一个数字,对应的是Calendar的月份常数。一月是0,二月是1····十二月是11,依次类推。
因此如果想要返回一月、二月、三月类似的字眼,则可以这样写:将月份放入一个字符数组中
String[] months = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月","九月", "十月", "十一月", "十二月"};
Calendar rightNow = Calendar.getInstance(); System.out.println(months[rightNow.get(Calendar.MONTH)]);
//如果只是想要返回的数字的话,只需要将返回的常数+1即可
int month=rightNow.get(Calendar.MONTH)+1;
//需要补0的话-- 无法使用三目运算符,因为编译无法通过
String montStr="";
if(month<=9){
montStr="0"+month;
}else{
montStr=""+month;
}
System.out.println("补0:"+montStr);
二、Calendar操作时间的get()、set()、add()方法
在Calendar我们可以使用get()方法来获取时间,而使用set()、add()方法来进行时间运算,例如设置当前时间和当前时间加上一个值之后的时间。
1.使用get()方法获取时间
Calendar cal=Calendar.getInstance();
cal.get(Calendar.YEAR);//获取当前年份
cal.get(Calendar.MONTH) + 1; //获取当前月份,需要+1
cal.get(Calendar.DATE);//获取当前天数,
cal.getActualMaximum(Calendar.DATE);//当前月最大天数
cal.getActualMinimum(Calendar.DATE);//当前月最小天数
cal.get(Calendar.HOUR_OF_DAY);//获取当前处于一天中的第几个小时,
cal.get(Calendar.MINUTE);//获取当前分钟数
cal.get(Calendar.SECOND);//获取当前秒数
cal.get(Calendar.DAY_OF_WEEK);//星期(Locale.ENGLISH情况下,周日是1,周一2,周二3,周三4,周四5,周五6,周六7)
//如果需要将获得到的时间格式化输出,则需要使用SimpleDateFormart 模式为yyyy-MM-dd HH:mm:ss
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=cal.getTime();
System.out.println("格式化时间:"+sdf.format(date));
2.使用set()方法来进行设置指定时间
Calendar cal=Calendar.getInstance();
cal.set(2020, 3, 3, 13, 44, 51);//年月日时分秒(月份0代表1月)
cal.set(Calendar.YEAR, 2014);//年
cal.set(Calendar.MONTH, 7);//月(月份0代表1月)
cal.set(Calendar.DATE, 11);//日
cal.set(Calendar.HOUR_OF_DAY, 15);//时
cal.set(Calendar.MINUTE, 3);//分
cal.set(Calendar.SECOND, 32);//秒
设置时间之后用getTime()得到时间 例如:
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("设置指定时间:"+format1.format(cal.getTime()) );
3.使用add()方法对时间进行运算
Calendar cal=Calendar.getInstance();
cal.add(Calendar.YEAR, 1);//给当前年份加1年,-1就是减一年
cal.add(Calendar.MONTH, 1);//给当前月加1月
cal.add(Calendar.DATE, 1);//当前时间+1
cal.add(Calendar.HOUR_OF_DAY, -1);//当前小时-1
cal.add(Calendar.MINUTE, 1);//分
cal.add(Calendar.SECOND, 1);//秒
cal.add(Calendar.DATE, 7);//周
三、近段时间需求用到的时间:整理为工具类
//获取当前系统时间的前一个月的1号
public static String getDateBegin(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH,month-1);//月份为0-11
c.set(Calendar.DATE,1);//设置当前时间的前一个月1日
Date date=c.getTime();
String dateStr= sdf.format(date)+" 00:00:00";
return dateStr;
}
//获取当前时间的前一个月的月底
public static String getDateEnd(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH,month-1);//月份为0-11
c.set(Calendar.DATE,1);
int maxdate=c.getActualMaximum(Calendar.DATE);//获取当月的最大天数
c.set(Calendar.DATE, maxdate);
Date date=c.getTime();
String dateStr= sdf.format(date)+" 23:59:59";
return dateStr;
}
//获取当前时间的前一个月 年月形式
public static String getYearAndMonth(){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1); //得到前一个月
String start = format.format(c.getTime());
return start;
}
其他详细资料可以参考JDK API的java.util.Calendar ,也可直接看源码。
参考博文:https://www.cnblogs.com/jpfss/p/10455540.html