20145330第七周《Java学习笔记》
2016-04-16 22:28
507 查看
20145330第七周《Java学习笔记》
第十三章 时间与日期
认识时间与日期
时间的度量GMT(格林威治标准时间):现在不是标准时间
世界时(UT):1972年UTC出来之前,UT等价于GMT
国际原子时(TAI):秒的定义
世界协调时间(UTC):闰秒
Unix时间:1970.1.1 00:00开始的秒数
epoch:java.util.Date epoch毫秒数
日历
儒略历
格里高利历
ISO860标准
认识Date与Calender
时区Date与DateFormat
Date只用来获取epoch毫秒数
DateFormat来格式化成人类理解的年月日时分秒
Calender:时间的运算
有人会使用Date实例来取得系统事件描述,不过Date也是偏向机器的时间观点,例如:
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()); } }
格式化时间日期的DateFormat
通过DateFormat的各种静态方法进行格式化
import java.util.*; import static java.lang.System.out; import static java.text.DateFormat.*; public class DateFoematDemo { 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)); } }
DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,你可以直接构建SimpleDateFormat实例,或是使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance等静态方法,用较简便方式按不同需求取得SimpleDateFormat实例。
SimpleDateFormat还有个parse()方法,可以按构建SimpleDateFormat时指定的格式,将指定的字符串剖析为Date实例。如:
import java.util.*; import java.text.*; public class HoeOld { 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))); } }
结果执行如图:
JDK8新时间日期API
机器时间 Instant人类时间(ISO8601 标准)
LocalDateTime
LocalDate
LocalTime
ZonedDateTime
OffsetdateTime
Year
YearMonth
Month
MonthDay
TemporalAmount
TemporalUnit
TemporalAccessor
Chronology
如果取得了Date实例,而想要改用Instance,则可以调用Date市里的toInstance()方法来取得,如果有个Instance实例,可以使用Date的静态方法from()转为Date。
LocalDateTime、LocalDate、LocalTime等类名称开头为Local,表示它们都只是对时间的描述,并没有时区信息。
对于时间计量,新时间与日期API以类Duration来定义,可用于计量天、时、分、秒的时间差,精度调整可以达纳秒等级,而秒的最大值可以是long类型保存值。对于年、月、星期、日的时间差,则使用Period类定义。如:
import java.time.*; import java.util.Scanner; import static java.lang.System.out; public class HowOld2 { 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()); } }
执行结果如下:
年历系统设计
JDK8采用一年历系统设计,也就是说,java.time套件中的类在需要实行年历系统时都是采用单一的ISO8601年历系统。需要明确实行java.time.chrono.Chronology接口的类学习中的问题和解决方法
在时间计算中,时区的计算是非常困难的,在新的时间与日期API中个,UTC偏移量与时区的概念是分开的,OffsetDateTime单纯代表UTC偏移量,使用ISO 8601,如果有LocalDateTIme、LocalDate、Localtime也可以在分别补齐必要信息后,取得UTC偏移量。
在运行DateFormatDemo中,提示它是公共的,应该在该文件的.java中声明,代码中定义的本来就为public class,DateFormatDemo。之后去除public之后就能成功运行了。
学习感受
这周的任务相对之前轻松一些,所以也有更多的时间将知识梳理与弄明白。而且还有时间去复习其他科的知识,让我感到十分充实。希望可以一直保持状态,进入良好的学习循环中。代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 | |
第五周 | 200/1500 | 1/10 | 18/108 | |
第六周 | 500/1000 | 2/12 | 20/128 | |
第七周 | 300/1300 | 2/14 | 20/148 |
相关文章推荐
- java中list集合的clear
- java日常开发你还要纠结把String格式的日期转换成Date吗?
- Java中的Heap和Stack
- java学习笔记(五)
- JVM的内存布局
- java字符串与整数之间的互相转换
- struts2拦截器简单例子
- Atitit JAVA p2p设计与总结 JXTA 2
- 利用Myeclipse工具完成webservice的发布
- Atitit JAVA p2p设计与总结 JXTA 2
- Atitit JAVA p2p设计与总结 JXTA 2
- 在Java的JDBC使用中设置事务回滚的保存点的方法
- C#与JAVA的区别
- Mac下安装及配置Eclipse
- 用netbeans和xdebug调试php的配置
- Java 方法重载(overload)、方法重写(override)和可变参数列表
- java-内存结构学习
- spring框架学习笔记(一)
- Java语法基础-数组
- spring websocket 初次了解