您的位置:首页 > 编程语言 > Java开发

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

2016-04-17 18:09 441 查看

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/2001/220/20
第二周300/5001/318/38
第三周500/10001/422/60
第四周300/13001/530/90
第五周300/16001/630/160
第六周700/23002/730/190
第七周400/27002/930/220

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导

...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: