關於時間的操作(Java)

對於時間操作一般使用Date(時間類)SimpelDateFormat(時間格式類)Calendar(日曆接口)三者配合使用。以Date爲中心,SimpleDateFormat獲取字符串的日期轉換爲Date 類,再把Date類轉換到Calendar類計算後,再轉換爲Date類,最終轉換格式,使用SimpleDateFormat()輸出

當遇到類似的開發需求
要求用戶輸入一個日期,然後對該日期進行一系列的預算
再計算後的日期顯示給用戶時
流程如下
1.獲取用戶輸入的日期字符串
2.使用SimpleDateFormat將其轉換爲Date
3.創建一個Calendar,使其表示Date表示的日期
4.使用Calendar轉換爲一個Date
5.將Calendar轉換爲Date
6.使用SimpleDateFormat將Date轉換爲字符串後顯示給用戶

Date類常用方法和注意事項
1.Date date=new Date();此時date獲取的是當前時間
2.long getTime();獲取存儲在date類中長整形的變量(表示時間)
3.void setTime();把表示時間的長整形的變量存在Date裏

代碼示例:

import java.util.Date;

/*
 * java.util.Date
 * Date的每一個實例用於表示一個確切的時間點
 * 內部維護了一個long值,該值記錄的是從
 * 1970年1月1日00:00:00到表示的時間點之間所經歷的毫秒值
 * 正數是70年以後的日期,負數是70年以前的日期
 * 由於date設計上存在缺陷(時區,千年蟲),所以它的大部分方法被
 * 設置爲“過時的”,不再建議使用
 */
public class DemeDemo {

    public static void main(String[] args) {
        /*
         * 使用默認構造方法創建的Date表示當前的系統時間
         */
        Date now=new Date();
        /*
         * Date重寫了toString,返回的字符串
         * 顯示的就是當前Date表示的時間。格式:
         * Mon May 29 21:23:58 CST 2017
         * 對於非英語地區不夠友好
         */
        System.out.println(now.toString());
        /*
         * Date的大部分方法不建議使用了
         */
        now.getYear();
        /*
         * 獲取Date內部維護的long值
         */
        long time=now.getTime();
        System.out.println(time);
        //明天這一刻的毫秒值
        time+=1000*60*60*24*10000;
        System.out.println(new Date(time));
        /*
         * void setTime(long)
         * 設置一個long值,使Date表示該long值
         * 所表示的時間
         */
        now.setTime(time);
        System.out.println(now);
    }

}

SimpleDateFormat:
1.構造函數裏傳入的是格式例如:“yyyy-MM-dd hh:mm:ss”
y:表示年
M:表示月
d:表示日
H:表示小時(12小時制)
h:表示小時(24小時制)
m:表示分鐘
s:表示秒
2.String format(Date date)format
方法可以將給定的date對象說表示的時間按照SimpleDateFormat指定的日期格式轉換爲字符串
3.Date parse(String str)
將給定的字符串按照SimpleDateFormat指定的日期格式解析爲一個Date對象。
4.注意!!!使用parse方法時要拋出異常

代碼示例:

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * java.text.SimpleDateFormat
 * 根據一個給定日期格式將String與Date相互轉換
 * simple  簡單的
 * Format  格式
 * @author Analyze
 *
 */
public class SimpleDateFormatDemo1 {

    public static void main(String[] args) {
        //當前系統時間
        Date now=new Date();
        System.out.println(now);
        /*
         * 2016-05-25 10:14:55
         * yyy-MM-dd HH:mm:ss
         */
        SimpleDateFormat sdf=new SimpleDateFormat("y-M-d H:m:s");
        /*
         * Date->String
         * String format(Date date)
         * format方法可以將給定的date對象說表示的
         * 時間按照SimpleDateFormat指定的日期格式
         * 轉換爲字符串
         */
        String str=sdf.format(now);
        System.out.println(str);
    }

}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 從字符串轉換爲Date
 * Date parse(String str)
 * 將給定的字符串按照SimpleDateFormat指定的日期
 * 格式解析爲一個Date對象
 * parse:  解析,從語法上分析
 * @author Analyze
 *
 */
public class SimpleDateFormat2 {

    public static void main(String[] args) throws ParseException {
        String str="2008-08-08 20:08:08";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //String->Date
        Date date =sdf.parse(str);
        System.out.println(date.toString());
    }

}

Calendar:
1.Calendar是一個藉口,需要實現。常用的是陽曆的實現(用Calendar的靜態方法getInstance()方法)
Calendar c=Calendar.getInstance();
2.void set(int field,int value)
其中第一個參數爲:時間分量,例如:年月,日等等
第二個參數爲對應的值時間分量是一個int值,使用Calendar提供的常量
3.Calendar->Date
Date getTIme()
Calendar提供了方法gerTime,該方法 返回了一個Date對象,該對象表示的時間就是當前Calendar表示的時間
4.Date->Calendar
void setTime(Date date)
Calendar的setTime方法可以使當前Calendar表示給定的Date所表示的時間
5.int get(int field)
獲取對應時間分量的值
!!!注意!!!在設置時,獲取的月要加1,因爲一月是0
因爲美國是從星期天開始算起,所以1是星期天
6.getActualMaximum()
獲取某一個時間分量所允許的最大值
7.!!!!注意!!例如:
在2017.03.29-31號
新建一個Calendar的単例
設置年:2017
設置月:2
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
得到日期爲:3
例如:
在2017.03.01-28號
新建一個Calendar的単例
設置年:2017
設置月:2
int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
得到日期爲:28
原因:
1.Calendar類當你set的時候,並不會立即生效,set()方法是有延遲,就是當你寫這麼一段代碼時
cal.set(Calendar.MONTH, 5); 它是沒有立即生效的。
當調用get()、getTime()、getTimeInMillis()、add() 或 roll()方法時,
纔會重新計算日曆的時間值(以毫秒爲單位)。
解決方法:
實例化Calendar之後,執行clear方法,清除Calendar中的緩存
8.Calendar中計算時間的方法
void add(int field,int value)
對指定的時間分量加上給定的值,若給定的值是負數,則是減去給定的值

示例代碼

import java.util.Calendar;
import java.util.Date;

/*
 * java.util.Calendar
 * 日曆類
 * 該類是一個抽象類,封裝了對時間的相關操作
 * 常用的實現類陽曆
 * 使用日曆類是爲了對時間進行相關操作
 * 比如計算時間
 */
public class CalendarDemo {

    public static void main(String[] args) {
        /**
         * 使用Calendar的靜態方法創建實例
         * 該方法會更具當前系統時間是在地區創建一個相應
         * 的實現,通常是GregorianCalendar
         * 默認創建的日曆實例表示當前系統時間
         * 
         * instance 實例
         */
        Calendar calendar=Calendar.getInstance();
        /*
         * toString不能直觀反映表示的日期
         */
        System.out.println(calendar);
        /*
         * caslendar與Date之間的轉換
         * 
         * Calendar->Date
         * Date getTIme()
         * Calendar提供了方法gerTime,該方法
         * 返回了一個Date對象,該對象表示的時間就是
         * 當前Calendar表示的時間
         */
        Date date=calendar.getTime();
        System.out.println(date);
        /*
         * Date->Calendar
         * void setTime(Date date)
         * Calendar的setTime方法可以使當前
         * Calendar表示給定的Date所表示的時間
         */
        //Calendar也表示這一刻了
        calendar.setTime(date);
    }

}
import java.util.Calendar;

/**
 * Calendar提供了針對不同時間分量單獨設置值的方法
 * void set(int field,int value)
 * 其中第一個參數爲:時間分量,例如:年月,日等等
 * 第二個參數爲對應的值
 * 時間分量是一個int值,使用Calendar提供的常量
 * @author Analyze
 *
 */
public class CalendarDemo1 {

    public static void main(String[] args) {
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar.getTime());
        /*
         * 設置calendar,使其表示
         * 2008-08-08  20:08:08
         */
        //設定年
        calendar.set(Calendar.YEAR, 2008);
        System.out.println(calendar.getTime());
        /*
         * 設置月
         * 月從0開始,0表示一月
         * 或者可以使用具體月的常量(英文單詞)
         */
        calendar.set(Calendar.MONTH,7);
        System.out.println(calendar.getTime());
        /*
         * 設置日
         * 對應的時間分量常用的:
         * DATE:月中天
         * DAY_OF_MONTH:月中的天,與DATE一致
         * DAY_OF_WEEK:週中的天,星期幾
         * DAY_OF_YEAR:年中的天
         */
        calendar.set(Calendar.DAY_OF_MONTH,8);
        System.out.println(calendar.getTime());
        /*
         * 設置時
         * HOUR:12小時制
         * HOUR_OF_DAY:24小時制
         */
        calendar.set(Calendar.HOUR_OF_DAY,20);
        //設置分
        calendar.set(Calendar.MINUTE, 8);
        //設置秒
        calendar.set(Calendar.SECOND, 8);
        System.out.println(calendar.getTime());
    }

}```

import java.util.Calendar;

/**getActualMaximum()
* 獲取某一個時間分量所允許的最大值
* @author Analyze
*
*Actual:實際的,真實的
*Maximum:最大的,極大地
*/
public class CalendarDamo4 {

public static void main(String[] args) {
    Calendar calendar=Calendar.getInstance();
    //當月總共有多少天
    int days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println("最多有"+days+"天");
    //查看2016年2月多少天
    /*例如:
                 在2017.03.29-31號
    新建一個Calendar的単例
    設置年:2017
    設置月:2
    int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
    得到日期爲:3
    例如:
    在2017.03.01-28號
    新建一個Calendar的単例
    設置年:2017
    設置月:2
    int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
    得到日期爲:28
    原因:
    1.Calendar類當你set的時候,並不會立即生效,set()方法是有延遲,就是當你寫這麼一段代碼時
    cal.set(Calendar.MONTH, 5); 它是沒有立即生效的。
    當調用get()、getTime()、getTimeInMillis()、add() 或 roll()方法時,
    纔會重新計算日曆的時間值(以毫秒爲單位)。
    解決方法:
      實例化Calendar之後,執行clear方法,清除Calendar中的緩存

     */
    calendar.clear();
    calendar.set(Calendar.MONDAY, 1);
    calendar.set(Calendar.YEAR,2016);
    int ss=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(ss);

    //今天總共多少天?
    days=calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
    System.out.println(days);

}

}

import java.util.Calendar;

/**
* Calendar中計算時間的方法
* void add(int field,int value)
* 對指定的時間分量加上給定的值,若給定的值是負數,則是減去給定的值
* @author Analyze
*
*/
public class CalendarDamo5 {

public static void main(String[] args) {
    /*
     * 查看3年2個月零8天以後的日期
     */
    Calendar calendar=Calendar.getInstance();

    //查看三年後
    calendar.add(Calendar.YEAR, 3);
    System.out.println(calendar.getTime());
    //查看兩個月以後
    calendar.add(Calendar.MONTH, 2);
    System.out.println(calendar.getTime());
    //查看8天以後
    calendar.add(Calendar.DAY_OF_YEAR, 8);
    System.out.println(calendar.getTime());
    //查看五小時以前
    calendar.add(Calendar.HOUR,-5);
    System.out.println(calendar.getTime());
    /*
     * 當遇到類似的開發需求
     * 要求用戶輸入一個日期,然後對該日期進行一系列的預算
     * 再計算後的日期顯示給用戶時
     * 流程如下
     * 1.獲取用戶輸入的日期字符串
     * 2.使用SimpleDateFormat將其轉換爲Date
     * 3.創建一個Calendar,使其表示Date表示的日期
     * 4.使用Calendar轉換爲一個Date
     * 5.將Calendar轉換爲Date
     * 6.使用SimpleDateFormat將Date轉換爲字符串後顯示給用戶
     * 
     */
}

}
“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章