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多了纳秒精度
    }
}

 

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