20145206鄒京儒《Java程序設計》第7周學習總結

20145206 《Java程序設計》第7周學習總結

教材學習內容總結

第十三章 時間與日期

13.1.1 時間的度量
·即便標註爲GMT(格林威治時間),實際上談到的的是UTC(Unix時間)時間。
·秒的單位定義時基於TAI。也就是銫原子輻射的振動次數。
·UTC考慮了地球自轉愈來愈慢而有閏秒修正,確保UTC與UT相差不會超過0.9秒。最近一次的閏秒修正爲2012年6月30日。
·Unix時間是1970年1月1日00:00:00爲起點二通過的描述,不考慮閏秒,不少Unix系統、平臺、軟件等,都選擇這時間做爲時間表示發的起算點。html

13.1.2 年曆簡介java

·儒略曆:修正了羅馬歷隔三年設置一閏年的錯誤,改採四年一閏。
·格力高利歷:將儒略曆1582年10月4號星期四的隔天,訂爲格里高利曆1582年10月15日星期五。
·ISO 8601標準,採用統一的數據格式例如:yyyy-mm-ddTHHH:MM:SS.SSS等。學習

13.1.3 認識時區設計

UTL偏移
日光節約時間:也稱爲夏季時間,基本上就是在實施的第一天,讓白天的時間增長一小時,而最後一天結束後再調整一小時回來。code

13.2.1 時間軸上瞬間的Dateorm

·若是想取得系統時間,方法之一就是使用System.currentTimeMillis()方法,返回long類型整數,表明1970年1月1日0時0分0秒0毫秒至今通過的毫秒數。
P429範例以下:htm

package CH7;

/**
 * Created by Administrator on 2016/4/16.
 */
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的職責。對象

13.2.2 格式化時間日期的DateFormatblog

有關字符串時間格式的處理,職責落到了java.text.DateFormat身上。能夠經過DAteForm的各類靜態方法,進行格式化;還可使用模式字符串自定義格式。開發

parse()方法,能夠將指定的字符串剖析爲Date實例。

package CH7;

/**
 * Created by Administrator on 2016/4/16.
 */
import java.util.*;
import java.text.*;
public class HowOld {
    public static void main(String[] args) throws Exception {
        System.out.print("輸入出生年月日(yyy-mm-dd):");
        DateFormat dateFormat = new SimpleDateFormat("yyy-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)));
    }
}

13.2.3 處理時間日期的Calendar

·Date建議做爲時間軸上的瞬時表明,要格式化時間日期則經過DateFormat,若是想要取得某個時間日期信息,或者是對時間日期進行操做,可使用calendar。
·創建Calendar實例,可使用get()方法並指定Calendar上的字段。 使用add()方法改編時間,使用roll()方法只針對日期中的某個字段加減。

13.2.4 設定TimeZone

·使用Calendar時,並無使用時區信息,這回使用該默認時區,可使用java.util.TImeZone的getDefault()來取得默認時區信息
·可用的ID可使用TimeZone.getAvailableIDs()來取得,它會返回String[]

13.3.1 機器時間觀點的API

·因爲某一時區已經不實施日光節約一段時間了,許多開發者並不知道過去有過日光節約時間,在取得Date實例後,被名稱Date誤導他們表明日期,因此不該該使用Data實例來得知人類觀點的時間信息。
·真正可靠的信息只有內含epoch毫秒數。同時也可使用Instant的靜態方法now()取得表明Java epoch毫秒數的Instant實例。

13.3.2 人類時間觀點的API

·LocalDateTime只包括時間與日期,LocalDate只有日期,LocalTime只有時間,他們都是對時間的描述,沒有時區信息。
·若須要時區信息,可基於上述三個時間描述的ZoneDateTime和OffsetDateTIme.

13.3.3 對時間的運算

1.TemporalAmount

時間差以Duration定義,日期差以Period定義。

2.TemporalUnit

between()方法用於計算時間差

3.Temporal

4.TemporalAccessor定義了只讀的時間對象

教材學習中的問題和解決過程

從P432代碼運行結果上看:

正如書上解釋的那樣,一年的毫秒數並非如這個範例中,能夠簡單的使用3652460601000計算出來,實際上算出來的歲數也是錯的,撰寫的時間點是2016/4/16.由於還沒過5/26,因此應當是40歲。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 100/100 1/2 10/15
第二週 100/200 2/4 15/30
第三週 300/500 1/5 30/60
第四周 300/800 1/6 30/90
第五週 347/1147 1/7 30/120
第六週 352/1499 2/9 30/150
第七週 258/1757 2/11 30/180

參考資料

相關文章
相關標籤/搜索