zoukankan      html  css  js  c++  java
  • java 中的Calendar日历类

    一、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

  • 相关阅读:
    poj 1269(两条直线交点)
    poj 2398(叉积判断点在线段的哪一侧)
    poj 2318(叉积判断点在线段的哪一侧)
    HDU 5650 so easy
    POJ 1328 Radar Installation
    POJ 1017 Packets
    POJ 3190 Stall Reservations
    CodeForces 652A Gabriel and Caterpillar
    CodeForces 652B z-sort
    CodeForces 652C Foe Pairs
  • 原文地址:https://www.cnblogs.com/jasonboren/p/12625625.html
Copyright © 2011-2022 走看看