Calendar時間獲取天,周,月,季度,年度時間段

Date類 

Date類的大多數構造函數和方法都已經拋棄,只留下和毫秒有關的操做,目前經常使用的構造函數函數

經常使用方法spa

設置毫秒數3d

讀取毫秒數code

toString()打印結果orm

//建立日期對象,把當前的毫秒值轉成日期對象
Date date = new Date(1607616000000L);
System.out.println(date);
//打印結果:Fri Dec 11 00:00:00 CST 2020

DateFormate類格式化日期

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)容許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化。將Date由毫秒轉換爲指定的表現形式對象

 

pattern格式blog

當出現y時,會將y替換成年文檔

當出現M時,會將M替換成月字符串

當出現d時,會將d替換成日get

當出現H時,會將H替換成時

當出現m時,會將m替換成分

當出現s時,會將s替換成秒

代碼演示:
//建立日期格式化對象,在獲取格式化對象時能夠指定風格
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//對日期進行格式化
Date date = new Date(1607616000000L);
String str_time = df.format(date);
System.out.println(str_time);//2020年12月11日

經常使用方法

代碼演示:
練習一:把Date對象轉換成String
    Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020
    DateFormat df = new SimpleDateFormat(「yyyy年MM月dd日」);
    String str = df.format(date);
    //str中的內容爲2020年12月11日

練習二:把String轉換成Date對象
    String str = 」2020年12月11日」;
    DateFormat df = new SimpleDateFormat(「yyyy年MM月dd日」);
    Date date = df.parse( str );
    //Date對象中的內容爲Fri Dec 11 00:00:00 CST 2020

Calendar類 

Calendar是日曆類,在Date後出現,替換掉了許多Date的方法。該類將全部可能用到的時間信息封裝爲靜態成員變量,方便獲取。

Calendar爲抽象類,因爲語言敏感性,Calendar類在建立對象時並不是直接建立,而是經過靜態方法建立,將語言敏感內容處理好,再返回子類對象

Calendar c = Calendar.getInstance();  //返回當前時間

經常使用方法

public static Calendar getInstance() //獲取日期對象

public int get(int field)   //獲取時間字段值,字段參見幫助文檔

YEAR 年

MONTH 月,從0開始算起,最大11;0表明1月,11表明12月。

DATE 天

HOUR 時

MINUTE分

SECOND秒

        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);  //獲取年份
        int month = calendar.get(Calendar.MONTH)+1;   //國外是0-11月,因此要加一
        int day = calendar.get(Calendar.DAY_OF_MONTH);  //獲取月的第幾日
        System.out.println("年:"+year+"月:"+month+"日:"+day);

public final void set(int field,int value)//設置指定字段的值

        Calendar calendar = Calendar.getInstance();
        //設置時間爲2020年5月20日
        calendar.set(Calendar.YEAR, 2020);
        calendar.set(Calendar.MONTH, 4);
        calendar.set(Calendar.DATE, 20);

public final Date getTime()    //獲取該日曆對象轉成的日期對象

        Calendar c = Calendar.getInstance();
        Date d = c.getTime();

public void add(int field,int amount)   //指定字段增長某值

    Calendar c = Calendar.getInstance();
    //修改當前時間爲3天后
    c.add(Calendar.DATE, 3);
    //修改當前時間爲5小時後
    c.add(Calendar.HOUR, 5);

小節:Date類是日期類,DateFormate類用來將Date和字符串形式的日期相互轉換,Calendar類用來操做Date類。 

封裝一個簡單的日期格式化類

public class Time {
    //date爲日期時間,format爲格式
    public static String getDateFormat(Date date,String format) {
        return new SimpleDateFormat(format).format(date);
    }
}

1.獲取當前時間

Calendar calendar = Calendar.getInstance();
String now = Time.getDateFormat(calendar.getTime(),"yyyy-MM-dd HH:mm:ss");

2.獲取今天到如今的時間段

Calendar c = Calendar.getInstance();
String left_time = null, right_time = null;
//當前時間
right_time = Time.getDateFormat(c.getTime(),"yyyy-MM-dd HH:mm:ss");
//將calendar設爲 年月日00:00:00
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE),0,0,0);
//凌晨時間
left_time = Time.getDateFormat(c.getTime(),"yyyy-MM-dd HH:mm:ss");

3.獲取從週一到目前爲止的時間段

Calendar c = Calendar.getInstance();
String left_time = null, right_time = null;
//獲取今天是這周的第幾天,週日爲1,週一爲2,週六爲7
int day = c.get(Calendar.DAY_OF_WEEK);
//獲取當前時間
right_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss");
//獲取週一的calendar,若是是週日,則減6.若是不是,則減去DAY_OF_WEEK比周一Val大的部分.剩下的就是週一
c.add(Calendar.DAY_OF_MONTH, day==Calendar.SUNDAY?-6:-(day - Calendar.MONDAY));
//獲取本週一的凌晨時間,獲取週一的年月日,而後拼接00:00:00
left_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd ") + "00:00:00";

4.獲取本月到目前的時間段

Calendar c = Calendar.getInstance();
String left_time = null, right_time = null;
//獲取當前時間
right_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss");
//calendar設爲本月一號
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1);
//獲取本月一號凌晨時間
left_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd ") + "00:00:00";

5.獲取本季度到目前爲止的時間段

//LeftTimeAndEndTime爲封裝了起始時間的類,c爲Calendar 實例
private CitizenCardStatistics quarterly(LeftTimeAndEndTime s,Calendar c) {
        Calendar c1 = Calendar.getInstance();
        c1.set(c.get(Calendar.YEAR), Calendar.JANUARY, 1);
        Calendar c3 = Calendar.getInstance();
        c3.set(c.get(Calendar.YEAR), Calendar.MARCH, 31);
        Calendar c4 = Calendar.getInstance();
        c4.set(c.get(Calendar.YEAR), Calendar.APRIL, 1);
        Calendar c6 = Calendar.getInstance();
        c6.set(c.get(Calendar.YEAR), Calendar.JUNE, 30);
        Calendar c7 = Calendar.getInstance();
        c7.set(c.get(Calendar.YEAR), Calendar.JULY, 1);
        Calendar c9 = Calendar.getInstance();
        c9.set(c.get(Calendar.YEAR), Calendar.SEPTEMBER, 30);
        Calendar c10 = Calendar.getInstance();
        c10.set(c.get(Calendar.YEAR), Calendar.OCTOBER, 1);
        if(c.compareTo(c1)>=0&&c.compareTo(c3)<=0){//一季度
            s.setLeft_time(Time.getDateFormat(c1.getTime(), "yyyy-MM-dd ") + left);
            s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"));
        }else if(c.compareTo(c4)>=0&&c.compareTo(c6)<=0){//二季度
            s.setLeft_time(Time.getDateFormat(c4.getTime(), "yyyy-MM-dd ") + left);
            s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"));
        }else if(c.compareTo(c7)>=0&&c.compareTo(c9)<=0){//三季度
            s.setLeft_time(Time.getDateFormat(c7.getTime(), "yyyy-MM-dd ") + left);
            s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"));
        }else{//四季度
            s.setLeft_time(Time.getDateFormat(c10.getTime(), "yyyy-MM-dd ") + left);
            s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"));
        }
        return s;
}
//封裝起始時間的類
LeftTimeAndEndTime s = new LeftTimeAndEndTime();
Calendar c = Calendar.getInstance();
String left_time = null, right_time = null;
//根據calendar獲取本季度時間和當前時間
s = quarterly(s, c);
left_time = s.getLeft_time();
right_time = s.getRight_time();

6.年度到目前爲止時間段

Calendar c = Calendar.getInstance();
//獲取當前時間
right_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss");
//calendar設爲本年度的一月一號
c.set(c.get(Calendar.YEAR), Calendar.JANUARY, 1);
//獲取今年的起始時間
left_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd ") + "00:00:00";

 獲取根據本月日期獲取上個月日期

    /**
     * 根據年月日獲取上一個月的年月日日期
     * @param currentDate 傳入yyyy-mm-ss格式的String
     * @return
     * String
     */
    public static String getLastDate(String currentDate) {
 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = sdf.parse(currentDate);   //dateFormat把String轉換爲Date
        } catch (ParseException e) {
            e.printStackTrace();
        }
 
        Calendar c = Calendar.getInstance();  //獲取Calendar實例
        c.setTime(date);  //將String轉換後的Date傳給Calendar
        c.add(Calendar.MONTH, -1);//Calendar月份減一
        //拼接結果
        String lastDate = c.get(Calendar.YEAR) + "-"
                + ((c.get(Calendar.MONTH) + 1)<10?("0"+(c.get(Calendar.MONTH) + 1)):(c.get(Calendar.MONTH) + 1))+"-"+((c.get(Calendar.DATE))<10?"0"+(c.get(Calendar.DATE)):(c.get(Calendar.DATE)));
 
        return lastDate;
    }

遍歷某月每一天

    /**
     * 遍歷月份的每一天
     * @param year 年份
     * @param month 月份
     */
    public static void dateInMonthIterator(int year,int month){
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //設置時間格式
        
        Calendar calendar = Calendar.getInstance(); //獲得日曆
        calendar.set(year, month-1, 1);  //設置年月日,月份從0開始
        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);   //獲取當月最大天數
        
        for (int i = 0; i < maxDay; i++) {  
            Date date = calendar.getTime();
            String time = sdf.format(date);    
            
            System.out.println(time);  //進行每一天的操做
            
            calendar.add(Calendar.DAY_OF_MONTH, 1);  //天數加一操做
        }
    }
相關文章
相關標籤/搜索