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


Date類 

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

常用方法

設置毫秒數

讀取毫秒數

toString()打印結果

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

DateFormate類格式化日期

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

 

pattern格式

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

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

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

當出現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);  //天數加一操作
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM