20145312 《Java程序设计》第七周学习总结
20145312 《Java程序设计》第七周学习总结
学习笔记
Chapter 13时间与日期
13.1 认识时间与日期
13.1.1 时间的度量
- 格林威治标准时间
- 世界时:观测远方星体跨过子午线而得。
- 国际原子时:铯原子辐射振动。
- 世界协调时间:地球自转越来越慢,提出具有折衷修正版本的世界协调时间。
- Unix 时间:定义为UTC时间1970年(Unix 元年)1月1日00:00:00为起点而经过的秒数。
- epoch:某个特定的时代开始,时间轴上的某一瞬间。
13.1.2 年历简介
- 儒略历:现今公历的前身,用来取代罗马历。
- 格里高利历:由宗教Pope Gregory XIII于1528年颁行。
- ISO 8601 标准:时间日期表示方法的标准。
13.1.3 认识时区
- 从地理上来说,由于地球是圆的,基本上一边白天另一边就是夜晚,因而设置了UTC偏移。
- 有些高纬度国家,夏季、冬季日照时间差异很大,为了节省能源会尽量利用夏季日照,因而实施日光节约时间,也称为夏季时间。
13.2 认识Date与Calendar
13.2.1 时间轴上瞬间的Date
- 使用System.currentTimeMillis()是取得系统时间的方法之一。
代码如下:
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());
}
}
结果截图:
13.2.2格式化时间日期的DateFormat
- 有关字符串时间格式的处理用java.text.DateFormat,DateFormat是个抽象类,其操作类是java.text.Simple.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的好处是,可使用模式字符串自定义格式。
代码如下:
package DateCalendar;
import java.text.*;
import java.util.*;
public class SimpleDateFormatDemo {
public static void main(String[] args){
DateFormat dateFormat=new SimpleDateFormat(
args.length==0?"EE-MM-dd-yyyy":args[0]
);
System.out.println(dateFormat.format(new Date()));
}
}
结果截图:
SimpleDateFormat还有parse()方法,可以按构建SimpleDateFormat时指定的格式,将指定的字符串剖析为Date实例。
代码如下:
package DateCalendar;
import java.text.*;
import java.util.*;
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.printf("你今年的岁数为:%n" +(life/(365*24*60*60*1000L)));
}
}
结果截图:
13.2.3 处理时间日期的Calendar
- 如果想要取得某个时间日期信息,或者对时间日期进行操作,可以使用Calendar实例。
- 取得Calendar实例,可以使用getTime()取得Date实例。
- 取得Calendar实例后,可以使用add()方法来改变Calendar时间。
代码如下:
package DateCalendar;
import static java.lang.System.out;
import java.util.Calendar;
public class CalendarUtil {
public static void main(String[] args){
Calendar birth=Calendar.getInstance();
birth.set(1996,Calendar.JANUARY,27);
Calendar now=Calendar.getInstance();
out.printf("岁数:%d%n",yearsBetween(birth,now));
out.printf("天数:%d%n",daysBetween(birth,now));
}
public static long yearsBetween(Calendar begin,Calendar end){
Calendar calendar=(Calendar) begin.clone();
long years=0;
while(calendar.before(end)){
calendar.add(Calendar.YEAR,1);
years++;
}
return years-1;
}
public static long daysBetween(Calendar begin,Calendar end){
Calendar calendar=(Calendar) begin.clone();
long days=0;
while(calendar.before(end)){
calendar.add(Calendar.DATE,1);
days++;
}
return days-1;
}
}
结果截图:
13.2.4 设定TimeZone
- 可以使用java.util.TimeZone的getDefault()来取得默认时区信息。
代码如下:
package DateCalendar;
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("\t时区ID:"+timeZone.getID());
out.println("\t日光节约时数:"+timeZone.getDSTSavings());
out.println("\tUTC偏移毫秒数:"+timeZone.getRawOffset());
}
}
结果截图:
可用的ID可以使用TimeZone.getAvailableIDs()来取得,它会返回String[]。
代码如下:
package DateCalendar;
import static java.lang.System.out;
import java.util.*;
public class TimeZoneDemo2 {
public static void main(String[] args){
TimeZone shanghaiTz=TimeZone.getTimeZone("Asia/Shanghai");
Calendar calendar=Calendar.getInstance(shanghaiTz);
showTime(calendar);
TimeZone copenhagenTz=TimeZone.getTimeZone("Europe/Copenhagen");
calendar.setTimeZone(copenhagenTz);
showTime(calendar);
TimeZone washingtonTz=TimeZone.getTimeZone("American/Washington");
calendar.setTimeZone(washingtonTz);
showTime(calendar);
}
static void showTime(Calendar calendar){
out.print(calendar.getTimeZone().getDisplayName());;
out.printf("%d:%d%n",
calendar.get(Calendar.HOUR),
calendar.get(Calendar.MINUTE));
}
}
结果截图:
13.3 JDK8新时间日期API
13.3.1 机器时间观点的API
- Date名称是机器的时间观念,JDK8新时间日期处理API时,主要套件命名为java.time。
- 对于机器相关的时间观念,设计了Instant类。
- 可以使用now()方法取得Instant实例。
4,取得Date实例后,想改用Instant,可以调用from()方法。
13.3.2 人类时间观念的API
- LocalDateTime、LocalDate和LocalTime
1)对于片段的日期时间,JDK8新时间与新日期API有LocalDateTime(包括日期与时间)、LocalDate(只有日期)、LocalTime(只有时间)等类来定义。 - ZoneDateTime和OffsetDateTime
代码如下:
package DateCalendar;
import static java.lang.System.out;
import java.time.*;
public class ZonedDateTimeDemo {
public static void main(String[] args){
LocalTime localTime=LocalTime.of(0,0,0);
LocalDate localDate=LocalDate.of(1996,1,27);
ZonedDateTime zonedDateTime=ZonedDateTime.of(
localDate,localTime,ZoneId.of("Asia/Shanghai")
);
out.println(zonedDateTime);
out.println(zonedDateTime.toEpochSecond());
out.println(zonedDateTime.toInstant().toEpochMilli());
}
}
结果截图:
Year、YearMonth、Month和MonthDay
代码如下:
package DateCalendar;
import static java.lang.System.out;
import java.time.Month;
public class MonthDemo {
public static void main(String[] args){
for(Month month:Month.values()){
out.printf("original:%d\tvalue:%d\t%s%n",
month.ordinal(),month.getValue(),month);
}
}
}
结果截图:
13.3.3 对时间的运算
1.TemporalAmount
1)JDK8新日期时间处理实现了流畅API的概念,其中,ofPattern()其实是java.time.format.DateTimeFormatter的静态方法,可以查看API文件了解格式化的方式。
2)TemporalAmount的操作类就是Period与Duration。
代码如下:
package DateCalendar;
import java.time.*;
import java.util.Scanner;
import static java.lang.System.out;
public class HowOld2 {
public static void main(String[] args){
out.print("输入出生年月日(yyy-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());
}
}
结果截图:
代码调试中的问题和解决过程
问题:
教材p436页TimeZoneDemo.java代码运行结果:
所显示的时区ID是Asia/Shanghai
,为什么不是Asia/Beijing
呢?
解决过程:
通过查阅相关资料,发现Java所支持的所有时区ID里面并没有Asia/Beijing
,所以对于中国大陆时区的而言,显示的应该都是Asia/Shanghai
其他(感悟、思考等,可选)
本周学习内容相对简单,学习任务适中,使我能够有结余的时间来复习前面没弄懂的地方。本章###时间与日期从最基础的时间度量开始讲起,主要教给我们输出时间,设置时间,查找时间和运算时间,讲解详细,形成了较为完整的知识架构易于我们的学习。
代码托管截图:
学习进度条
参考资料
20145312 《Java程序设计》第七周学习总结的更多相关文章
- 201521123027 <java程序设计>第七周学习总结
1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...
- 20145312 《Java程序设计》第九周学习总结
20145312 <Java程序设计>第九周学习总结 学习笔记 Chapter 16整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 SUN公司为了简化.统一对数据库的操作, ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
随机推荐
- [linux基础学习]默认的目录介绍
以下用一个表格来罗列linux默认的目录或文件及其用途: 目录/文件 用途 来源 / /处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录.文件.设备都在/之下. - / ...
- c++主程这种事情,就是这样,看人先看人品,没人品,他的能力与你何关?
这就是人品的重要性........ 接手别人的代码,说困难,也困难,说容易也容易 想把别人代码都读通,理顺,在改原代码BUG,在完美的加功能,那项目越大,越难 想把别人代码里面,加点坑,随便找个模块, ...
- SqueezeNet
虽然网络性能得到了提高,但随之而来的就是效率问题(AlexNet VGG GoogLeNet Resnet DenseNet) 效率问题主要是模型的存储问题和模型进行预测的速度问题. Model Co ...
- H5开发APP入门
一.MUI MUI是一个最接近原生APP体验的高性能前端框架.我们用它来排版布局. 官方网站:http://dev.dcloud.net.cn/mui/ 二.HTML5PLUS html5+是HBul ...
- SonarQube+jenkins+maven平台搭建
SonarQube代码质量管理 1.配置jdk和maven jenkins - 系统管理 - 全局工具配置 jdk安装: # which java# /usr/local/java/jdk1.8.0. ...
- Nginx+tomcat配置负载均衡集群
操作系统版本:Centos 6.4 Nginx版本:nginx-1.3.15.tar.gz wget http://nginx.org/download/nginx-1.5.9.tar.gz JDK版 ...
- Latch free等待事件
Latch free等待事件的三个参数:p1-latch的地址:p2-latch编号:p3-请求次数.从oracle10g起,latchfree不再包含所有的latch等待,有些latch等待可能表现 ...
- ITL(Interested Transaction List)理解
一.ITL描述: ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,l ...
- boost编译很慢的解决方法
场景:使用boost库的正则模块时出现编译超慢的情况,看了头文件 #include <boost/regex.hpp> 的引用关系,它依赖的头文件相当多,这应该就是根本原因吧. 目前知道可 ...
- PKU 4334 Trouble(哈希)
原题链接 思路:哈希存入相反数 注意:HDU不支持long long要使用__int64 #include<cstdio> #include<cstring> #define ...