java的日历类_java 中的Calendar日历类

一、java 中的Calendar日历类解析

Calendar类是一个抽象类public abstract class Calendar implements Serializable, Cloneable, Comparable,它为特定时间与一组诸如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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值