20145319 第七周学习总结

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

教材学习内容总结

一 时间的度量

  • 格林威治标准时间:简称GMT时间,其正午的时间是太阳到达天空最高点时(由于地球公转轨道为椭圆且速度不一,因而依此判断时间会造成越来越大的时间误差)

  • 世界时:又称UT时间,借由观测远方星体跨过子午线而得

  • 国际原子时:又称TAI时间,将秒的国际单位定义为铯原子辐射震动9192631770周耗费的时间

  • 世界协调时间:又称UTC时间由于TAI时间每秒是固定的,然而地球自转会越来越慢,为了保持TAI和UT时间不要差距过大,提出了折中的世界协调时间

  • Unix时间:以1970年1月1日00:00:00为起点

  • epoch:不少Unix的系统、平台、软件都选择这个时间作为时间表的起点

二 年历简介

  • 儒略历:如今公历的前身,用来取代罗马历,四年一闰年

  • 格里高利历:改革了儒略历

  • ISO 8601标准:ISO 8601并非年历系统,而是时间日期表示方法的标准,用统一时间日期的数据交换格式,如yyyy-mm-ddTHH:MM:SS.SSS

  • 认识时区:一般是经度偏移15度偏移一个小时,然而许多国家领土广阔,有多个时间反而困扰,如中国就只采用单一时区

三 认识Date和Calendar

  • 时间轴上瞬间的date:使用Date实例的各getTime可以获得epoch毫秒数,Data实例只用来当做时间轴上的某一瞬间

  • DateFormat:DataFormat可以对字符串格式进行处理,分别有getDateInstance()、getTimeInstance()、getDateTimeInstance()等静态方法 ,SimpleDateFormat还有个parse()方法,可以按构建SimpleDateFormat时指定的格式将指定字符串改为Date实例

  • Calendar:格式化时间日期需要DateFormat,如果想取得某个时间日期信息,对时间日期进行操作,需要使用Calendar实例

  • Timezone:一般都会使用默认时区,若要修改,可以使用java.util.Timezone中的getDefault()来取得默认时区信息

四 新时间日期API

  • 机器时间观点:Date实例应该只代表了机器观点的时间信息,真正可靠的只有内含的epoch毫秒数

  • 人类时间观点:

    1. localDateTime、LocalTime和LocalTime只有对时间的描述,并没有时区信息,如果定义了不存在的日期,就会跑出DateTimeException
    2. ZoneDateTime和OffsetDateTime:如果时间日期需要带有时区,可以基于localDateTime、LocalTime和LocalTime等来不齐缺少的信息
    3. Year YearMonth Month和MonthDay:如果要取得想要的月份数则需要使用getValue()方法
  • 对时间的运算:使用Calendar可以进行时间运算,jdk8中也提供了更加方便的时间运算方法以及输出格式,操作相应的temporal类即可

  • 年历设计系统:java.time中的类在需要实行年历系统时都是采用单一的ISO8601系统,如果需要其他年历系统则需要java.time.chrono操作java.time.chrono.Chronology接口的类

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

  • 虽说设计的时候费了很多心思,但是终归机器时间和人类时间还是有不同的,包括时区,历法,一年的时间也不总是3652460601000,感觉挺复杂的

代码调试中的问题和解决过程

操作题一 代码:

package chapter13;
import java.util.Scanner;
import java.util.Calendar;

public class rili{
	public static void main(String args[])
	{
		int year,month,day;
		Scanner yasuo=new Scanner(System.in);
		System.out.print("输入年份:");
		year=yasuo.nextInt();
		System.out.print("输入月份:");
		month=yasuo.nextInt();
		System.out.print("输入日子:");
		day=yasuo.nextInt();
		Calendar rili=Calendar.getInstance();
		System.out.println("\t");
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		rili.set(year,month,day);//设置日期将日历翻到指定日期
		int xingqi=rili.get(Calendar.DAY_OF_WEEK)-1;//记录星期,如果是1就是周日,7代表周六,依次类推
		String a[]=new String[xingqi+31];//存放号码的数组字符串
		for(int i=0;i<xingqi;i++)
		{
			a[i]="**";
		}
		for(int i=xingqi,n=1;i<xingqi+31;i++)
		{
			if(n<=9)
			{	
				a[i]=String.valueOf(n);				
			}
			else
			{
				a[i]=String.valueOf(n);
			}	
			n++;
		}
		for(int i=0;i<a.length;i++)//输出数组部分
		{
			if(i%7==0)
			{
				System.out.println("");//换行
				System.out.printf("%s",a[i]);
			}
			else
				 System.out.printf("%s","\t"+a[i]);
		}
	}
}

运行结果:

代码托管

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 150/150 1/1 20/20
第二周 200/350 1/2 20/40
第三周 300/650 1/3 20/60
第四周 350/1100 1/4 25/85
第五周 200/1300 1/5 20/105
第六周 200/1500 2/7 25/130
第七周 200/1700 2/9 15/145
第八周

参考资料

posted on 2016-04-17 22:21  20145319钟轲  阅读(173)  评论(1编辑  收藏  举报