20145110《Java程序设计》第七周学习总结

20145110 《Java程序设计》第七周学习总结

教材学习内容总结

13 时间与日期

时间的度量

  • 1.格林威治标准时间(GMT):常被不严谨地当成是UTC时间,现已不作为标准时间使用。

  • 2.世界时(UT):在1972年引入UTC之前,GMT与UT是相同的

  • 3.国际原子时(TAI):秒的单位定义是基于TAI,也就是铯原子辐射振动次数。

  • 4.世界协调时间(UTC):UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。

  • 5.Unix时间:不考虑闰秒修正,用以表达时间轴上某一瞬间

  • 6.epoch:某个特定时代的开始,用以表达时间轴上某一瞬间

认识Date与Calendar

package DateCalendar;

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());
    }
}


程序运行结果显示的数字也就是1970年1月1日至今所经过的毫秒数。

格式化时间日期的DateFormat:

package DateCalendar;



        import java.util.*;
        import static java.lang.System.out;
        import static java.text.DateFormat.*;

public class DateFormatDemo {
    public static void main(String[] args) {
        Date date = new Date();
        dateInstanceDemo(date);
        timeInstanceDemo(date);
        dateTimeInstanceDemo(date);
    }

    static void dateInstanceDemo(Date date) {
        out.println("getDateInstance() demo");
        out.printf("\tSHORT: %s%n", getDateInstance(LONG).format(date));
        out.printf("\tSHORT: %s%n", getDateInstance(SHORT).format(date));
    }

    static void timeInstanceDemo(Date date) {
        out.println("getTimeInstance() demo");
        out.printf("\tLONG: %s%n", getTimeInstance(LONG).format(date));
        out.printf("\tMEDIUM: %s%n", getTimeInstance(MEDIUM).format(date));
        out.printf("\tSHORT: %s%n",getTimeInstance(SHORT).format(date));
    }

    static void dateTimeInstanceDemo(Date date) {
        out.println("getDateTimeInstance() demo");
        out.printf("\tLONG: %s%n",
                getDateTimeInstance(LONG, LONG).format(date));
        out.printf("\tMEDIUM: %s%n",
                getDateTimeInstance(SHORT, MEDIUM).format(date));
        out.printf("\tSHORT: %s%n",
                getDateTimeInstance(SHORT, SHORT).format(date));
    }
}


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

处理时间日期的Calendar

  • Date现在建议作为时间轴上的瞬间代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用Calendar实例。
  • 取得Calendar实例后,可以使用getTime()取得Data实例,如果想要取得年月日等日期数字时段,可以使用get()方法并指定Calendar上的数字段枚举常数。
out.println(calendar.get(Calendar.YEAR));
out.println(calendar.get(Calendar.MONTH));
out.println(calendar.get(Calendar.DATE));
  • 如果你要设定时间日期等字段,不要对Date设定,应该使用Calendar,同样地,月份的部分请使用枚举常数设定。
Calendar calendar = Calendar.getInstace();
calendar.set(2016,Calendar.APRIL,16);   // 2016/04/16
out.println(calendar.get(Calendar.YEAR));   // 2016  
out.println(calendar.get(Calendar.MOUNTH)); //Calendar.APRIL取值3
out.println(calendar.get(Calendar.DATE));   //16  

JDK新时间日期API

如果我们的时间需要带有时区,可以基于LocalDateTime,LocalDate,LocalTime来弥补缺少的信息:

package DateCalendar;


        import static java.lang.System.out;
        import java.time.*;

public class ZonedDataTimeDemo {
    public static void main(String[] args) {
        LocalTime localTime = LocalTime.of(0, 0, 0);
        LocalDate localDate = LocalDate.of(1975, 4, 1);
        ZonedDateTime zonedDateTime = ZonedDateTime.of(
                localDate, localTime, ZoneId.of("Asia/Taipei"));

        out.println(zonedDateTime);
        out.println(zonedDateTime.toEpochSecond());
        out.println(zonedDateTime.toInstant().toEpochMilli());
    }
}

year,month,yearmonth与monthday:

如果想要取得代表月份的数字,不要使用oridinal()方法,因为oridinal()是enum在定义时的顺序,从0开始,想要取得代表月份的数要通过getValue()方法(调整了格式,使其对齐)。

package DateCalendar;



import java.time.*;
import java.util.Scanner;
import static java.lang.System.out;

public class HowOld {
    public static void main(String[] args) {
        out.print("输入出生年月日(yyyy-mm-dd):");
        LocalDate birth = LocalDate.parse(new Scanner(System.in).nextLine());
        LocalDate now = LocalDate.now();
        Period period = Period.between(birth, now);
        out.printf("你活了 %d 年 %d 月 %d 日%n",
                period.getYears(), period.getMonths(), period.getDays());
    }
}

教材学习中的问题和解决过程

当输入数据不符合规范时,会遇到编译错误。

本周代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/2 20/20
第二周 300/500 1/3 18/38
第三周 500/1000 1/4 22/60
第四周 300/1300 1/5 30/90
第五周 300/1600 1/6 30/160
第六周 700/2300 2/7 30/190
第七周 400/2700 2/9 30/220

参考资料

posted on 2016-04-17 18:09  20145110  阅读(122)  评论(1编辑  收藏  举报