Blog 時間與日期

import java.time.*;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Ans {
    public static void main(String[] args) {
        test1();
        test2();
        test5();
    }

    static void test1() {
        //老版本的方法
        // Date:
        Date date = new Date();
        System.out.println(date.getYear()+1900);         //getYear等函數以及在JDK1.1開始過時,由Calendar.get代替
        System.out.println(date.toString());
        System.out.println(date.toGMTString());
        System.out.println(date.toLocaleString());      //其實還有很多別的方法,但在這裏不細研究

        //Calendar比Date多了可以簡單運算的能力
        Calendar c = Calendar.getInstance();            //只能這樣的到,而且必然是當前時間,如果需要修改只能去覆蓋
        int y = c.get(Calendar.YEAR);
        int m = 1 + c.get(Calendar.MONTH);              //這裏與Date一樣,返回月份需要+1
        int d = c.get(Calendar.DAY_OF_MONTH);
        int w = c.get(Calendar.DAY_OF_WEEK);
        int hh = c.get(Calendar.HOUR_OF_DAY);
        int mm = c.get(Calendar.MINUTE);
        int ss = c.get(Calendar.SECOND);
        int ms = c.get(Calendar.MILLISECOND);
        System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);
        Date date1 = c.getTime();                       //轉換
        System.out.println(date1);

        //TimeZone爲時區轉換功能
        TimeZone tz0 = TimeZone.getDefault();
        TimeZone tz1 = TimeZone.getTimeZone("GMT+09:00");           //有好幾種方法得到時區
        System.out.println(tz1.getID());

        c.clear();                                                  //先清除
        c.setTimeZone(tz1);                                                 //設置時區
        c.set(2019, Calendar.NOVEMBER,20,8,15,0);   //設置時間
        System.out.println(c.getTime());
    }

    static void test2() {
        //新的方法:
        //LocalDateTime 從java 8開始
        LocalDate ld = LocalDate.now();
        LocalTime lt = LocalTime.now();
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ld);
        System.out.println(lt);
        System.out.println(ldt);                //這樣做可能使時間不統一(雖然在這裏體現不出來),因爲代碼的執行需要時間
        LocalDateTime ldt2 = LocalDateTime.now();
        LocalDate ld2 = ldt2.toLocalDate();
        LocalTime lt2 = ldt2.toLocalTime();     //這樣做最保險

        //如果要對LocalDateTime做格式上的操作,可以使用DateTimeFormatter

        //Duration表示兩個時刻之間的時間間隔,Period表示天數間隔
        LocalDateTime start = LocalDateTime.of(2019, 11, 19, 8, 15, 0);
        LocalDateTime end = LocalDateTime.of(2020, 1, 9, 19, 25, 30);
        Duration d = Duration.between(start,end);
        Period p = LocalDate.of(2019, 11, 19).until(LocalDate.of(2020, 1, 9));
        System.out.println(p);
        System.out.println(d);
    }

    static void test3() {
        //涉及到時間問題時不要自己計算,否則容易在始區,夏令時的問題上犯錯
        //LocalDateTime只能表示本地時間和日期,表示一個帶時區的時間就要ZonedDateTime
        ZonedDateTime zdt = ZonedDateTime.now();        //默認時區
        ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用ZoneId指定時區獲取當前時間
        System.out.println(zdt);
        System.out.println(zny);
    }

    static void test4() {
        //在使用新的LocalDateTime或ZonedLocalDateTime時格式化需要DateTimeFormatter
        //DateTimeFormatter不改變對象,且線程安全
    }

    static void test5() {
        //計算機儲存當前時間本質上就是一個不斷遞增的整數,System.currentTimeMillis返回的是毫秒錶示的當前時間
        System.out.println(System.currentTimeMillis());
        //我們也可以用Instant得到時間戳
        System.out.println(Instant.now());              //而Instant多了納秒精度
    }
}

 

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