zoukankan      html  css  js  c++  java
  • 20145103 《Java程序设计》第7周学习总结

    20145103《Java程序设计》第7周学习总结

    教材学习内容总结

    第十三章 时间与日期

    13.1 认识时间与日期

    就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间字符串描述),实际上谈到时间指的是UTC时间。

    秒的单位定义是基于TAI,也就是铯原子辐射振动次数。

    epoch为某个特定时代的开始,时间轴上某一瞬间。

    UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。

    Unix时间是1970年1月1日00:00:00为起点而经过的秒数,不考虑闰秒。

    13.2 认识Date与Calendar

    如果想要取得系统时间,方法之一是使用System.currentTimeMillis()方法,返回的是long类型整数。如:

    import java.util.*;
    import static java.lang.System.*;
    
    public class DateDemo {
        public static void main(String[] args) {
            Date date1 = new Date(currentTimeMillis());
            Date date2 = new Date();
    
            out.println(date1.getTime());
            out.println(date2.getTime());
        }
    }
    

    Date有两个构造函数可以使用,一个可使用epoch毫秒数构建,另一个为无自变量构造函数,内部亦是使用System.currentTimeMillis()取得毫秒数,调用getTime()可取得内部保存的epoch毫秒数值。范例执行结果如下:

    DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,你可以直接构建SimpleDateFormat实例,或是使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance等静态方法,用较简便方式按不同需求取得SimpleDateFormat实例。

    直接构建SimpleDateFormat的好处是,可使用模式字符串自定义格式。

    SimpleDateFormat还有个parse()方法,可以按构建SimpleDateFormat时指定的格式,将指定的字符串剖析为Date实例。如:

    import java.util.*;
    import java.text.*;
    
    public class HowOld {
        public static void main(String[] args) throws Exception {
            System.out.print("輸入出生年月日(yyyy-mm-dd):");
            DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
            Date birthDate = dateFormat.parse(new Scanner(System.in).nextLine());
            Date currentDate = new Date();
            long life = currentDate.getTime() - birthDate.getTime();
            System.out.println("你今年的歲數為:" + 
                      (life / (365 * 24 * 60 * 60 * 1000L)));
        }
    }
    

    执行结果如图:

    Date现在建议作为时间轴上的瞬间代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用Calendar实例。如:

    Calendar calendar = Calendar.getInstance();
    Calendar是个抽象类,java.util.GregorianCalendar是其子类,操作了儒略历与格里高利历的混合历,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例。如:

    out.println(calendar.get(Calendar.YEAR));
    out.println(calendar.get(Calendar.MONTH));
    out.println(calendar.get(Calendar.DATE));
    

    若想取得默认时区信息,可以使用java.util.TimeZone的getDefault()方法。如:

    import static java.lang.System.out;
    import java.util.TimeZone;
    
    public class TimeZoneDemo {
        public static void main(String[] args) {
            TimeZone timeZone = TimeZone.getDefault();
            out.println(timeZone.getDisplayName());
            out.println("	時區ID:" + timeZone.getID());
            out.println("	日光節約時數:" + timeZone.getDSTSavings());
            out.println("	UTC 偏移毫秒數:" + timeZone.getRawOffset());
        }
    }
    

    执行结果如图:

    13.3 JDK8新时间日期API

    13.3.1 机器时间观点的API

    真正可靠的信息只有内含epoch毫秒数。同时也可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。

    13.3.2 人类时间观点的API

    LocalDateTime只包括时间与日期,LocalDate只有日期,LocalTime只有时间,他们都是对时间的描述,没有时区信息。
    如果你的时间日期需要带有时区,可以基于LocalDateTime、LocalDate、LocalTime等来补充缺少的信息。
    ZonedDateTimeDemo.java运行结果如下:

    • 如果想要取得代表月份的数字,不要使用oridinal()方法,因为oridinal()是enum在定义时的顺序,从0开始,想要取得代表月份的数要通过getValue()方法。
    • MonthDemo.java运行结果如下:

    13.3.3 对时间的运算

    对于时间计量,新时间与日期API以类Duration来定义,可用于计量天、时、分、秒的时间差,精度调整可以达纳秒等级,而秒的最大值可以是long类型可保存值。对于年、月、星期、日的日期差,使用Period类定义。

    • HowOld2.java运行结果如下:

    13.3.4 年历系统设计

    JDK8采单一年历系统设计。如果需要其他年历系统,则需要明确实行java.time.chrono中等操作了java.time.chrono.Chronology接口的类。

    其他(感悟、思考等,可选)

    这周学习了第十二章和第十三章的内容。主要学习的是第十三章,讲的主要是时间与日期,我先把教材上的内容看了一遍,了解了时间与日期的基本知识,再进一步用Java语言实现时间与日期的输出。用书上的代码练习之后,对内容的了解更加深入。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 2000行 16篇 400小时
    第一周 200/200 1/2 20/20
    第二周 200/400 1/3 20/40
    第三周 200/600 1/4 20/30
    第四周 200/800 1/5 20/80
    第五周 200/1000 1/6 20/100
    第六周 200/1200 1/7 20/120
    第七周 200/1400 1/8 20/140
  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/20145103fwh/p/5402928.html
Copyright © 2011-2022 走看看