时间

自动装箱和拆箱操作:

1、从Java 5.0版本以后加入到了autoboxing功能。

2、自动“拆箱“和”装箱“是依靠JDK5的编译器在编译期的”预处理“工作。

方法的参数:

void takeNumber(Integer i):i是包装类型

传入的参数i既可以是Integer i,也可以是inti,如果传入的是基本类型i,则会自动包装为包装类型。

int giveNumber();返回类型为int

返回的类型可以是int,也可以是包装类型Integer,但是如果是Integer类型,则在返回的过程中会自动拆包为int类型。

Java中的时间:

1、Java中的时间使用标准类库的Date类表示,是用距离一个固定时间点的毫秒数表达的一个特定时间;

2、固定的时间点叫做纪元,是UTC时间1970年1月1日00:00:00;

3、UTC世界调整时间与GMT格林威治时间一样,是具有实际目的的科学标准时间。

Date类简介:long类型的时间

java.long.Date类封装日期及时间信息,Date类的大多数用于进行时间分量计算的方法已经被Calender取代。

1、Date类型的内部是一个long类型的时间,是当前时间的毫秒数

2、Date还提供了历法算法,可以计算出年份,月份,日期

3、setTime和getTime用于设置和获取时间的毫秒数,本质是获取或修改Date里面的时间

4、Date重写了toString()方法,用一个字符串来描述当前Date对象所表示的时间

5、Date重写了equals()方法,精确到毫秒,很少用,因为太精确了,不容易比较

public void testDate() {
		Date date=new Date();//需要导包:import java.util.Date;,获得当前的时间,Sun Apr 08 19:41:11 CST 2018
		System.out.println(date);//输出当前的时间Fri Apr 06 15:01:40 CST 2018
		
		int year=date.getYear()+1900;//getYear()一般不用,所以画了横线,获取年份
		//返回的时间是最后两位,比如1998,返回98,2000返回100,2008返回108,所以再后面加上1900就是当前的年份 
		System.out.println(year);//返回今年的年份,2018
		
		int month=date.getMonth()+1;//当前时间的月份,月份是从0开始累加的,所以要+1
		System.out.println(month);//4
		
		long time=date.getTime();//从1970年到现在的毫秒数
		System.out.println(time);//1522998100612
		
		
		time+=1000l*60*60*24*365;//一年以后的
		date.setTime(time);//将时间重新设置
		year=date.getYear()+1900;
		System.out.println(year);//2019
		
		date.setTime(Long.MAX_VALUE);//把时间设置为最大值
		year=date.getYear()+1900;
		System.out.println(year);//292278994,这个年份是最大的年份,比上面那个年份准确
		
		date.setTime(0);//表示1970年元旦00:00:00
		date.setTime(1000);//表示1970年元旦后过了1000毫秒
		
		date.setTime(-1000*60*60*24*365);//表示1969年,改成负的,就是1970年之前
		year=date.getYear()+1900;
		System.out.println(year);//1969		
	}

SimpleDateFormat()

java.text.SimpleDateFormat能够完成时间的格式化显示,把long类型的计算机的时间格式化为年月日时分秒,也可以把年月日时分秒转化为计算机的时间(也就是毫秒数),也可以自己设置规范化的时间。

构造方法:

1、 SimpleDateFormat();

//所在包:java.text.SimpleDateFormat;
	public void testDateFormat1() {//将当前系统时间显示为年月日时分秒
		long now=System.currentTimeMillis();//获取当前时间,是从1970年1月1日00:00:00到现在的毫秒数
		SimpleDateFormat fmt=new SimpleDateFormat();//按照本地的习惯设置日期格式,每个国家的日期格式不同
		String date=fmt.format(now);//将时间now格式化为文本格式,也就是年月日时分秒
		System.out.println(date);//18-4-8 下午7:38
	}

2、SimpleDateFormat(String pattern):用给定的格式和默认语言环境的日期格式符号构造SimpleDateFormat

public void testDateFormat2() {
		Date date=new Date();//当前系统时间
		System.out.println(date);//Sun Apr 08 19:51:18 CST 2018
		SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");//设置时间的格式
		String time=fmt.format(date);
		System.out.println(time);//2018-04-08  19:51:18
		//SimpleDateFormat():在输出时间给“人”看的时候有用
	}

方法:

--finalString format(Date date):将Date格式转换为String:把计算机的时间显示给人看

--Dateparse(String source) throws ParseException:将String解析为Date,处理人类输入的时间数据转换为Java的系统时间。

public void testDateParse() throws ParseException {
		//将“1990-4-1”转换为Java时间,Java时间的显示为:Sun Apr 08 19:51:18 CST 2018
		String dateStr="1990-04-01";//输入年月日
		SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");//"yyyy-MM-dd" 格式要与  "1990-04-01"格式对应
		Date d=fmt.parse(dateStr);//转换为java时间,不加throws ParseException会出现异常
		System.out.println(d);//Sun Apr 01 00:00:00 CST 1990
		System.out.println(d.getTime());//转换为long类型的毫秒数,638899200000	
		//parse什么时候使用?
		//处理人类输入的时间数据转换为Java的系统时间。
		String time="14:58:30";//输入时分秒
		SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
		Date t=sdf.parse(time);
		System.out.println(t);//Thu Jan 01 14:58:30 CST 1970,输出的是1970年1月1日的这个时间
	}

日期模式匹配字符:

年   yyyy年----2013年,yy----13年

月   MM月----01月,M----1月

日    dd日----06日,d日----6日

E   星期   E----星期日

a   AM或者PM的标识

H   24小时制

h   12小时制

m   分钟

s   

Calendar

注意星期日的值是1,星期一的值是2

一月的值是0,二月的值是1

java.util.Calendar类用于封装日历信息。

主要作用:

1、获取时间分量

2、进行时间计算

Calendar是抽象类,不能直接new,其子类根据不同国家的日历系统,其中应用最为广泛的就是格里高力历即通用的阳历。

Calendar中的getInstance方法:

Calendar提供了一个类方法(工厂方法)getInstance,以获得此类型的一个通用的对象,该方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化。

创建日历的方法:

              Calendarc1=Calendar.getInstance();

              Calendar c2=newGregorianCalendar();//格里高力历就是阳历

              Calendar c3=newGregorianCalendar(2014,Calendar.APRIL,1);//可以指定年月日

public void testCalendar() {
		//创建日历对象的两种方法
		Calendar c1=Calendar.getInstance();
		Calendar c2=new GregorianCalendar();//格里高力历就是阳历
		System.out.println(c1.getClass().getName());//java.util.GregorianCalendar,输出结果一样		
		System.out.println(c2.getClass().getName());//java.util.GregorianCalendar		
		
		Date d=c1.getTime();//getTime()可以转换calendar到Date类型的时间
		                    //也可以使用c1.setTime(d)设置c1的时间
		
		Calendar c3=new GregorianCalendar(2014,Calendar.APRIL,1);//阳历2014-4-1,参数分别是年、月、日
		
		//可以将Calendar类型转换为Date类型进行格式化输出
		SimpleDateFormat fmt=new SimpleDateFormat();
		d=c3.getTime();//将c3的时间设置为Date类型
		System.out.println(fmt.format(d));//14-4-1 上午12:00
		
		//格式化输出c1
		SimpleDateFormat sdf=new SimpleDateFormat();
		Date d1=c1.getTime();//getTime()可以转换calendar到Date类型的时间
		System.out.println(d1);//Sun Apr 08 21:33:36 CST 2018
	}

设置日期及时间分量:

使用Calendar提供的set方法及一些常量可以设置日期及时间分量,Calendar的时间设置需要从大到小处理!

public void testGet() {
		//获取时间及分量
		//计算2014-4-1是星期几
		//计算2014-6-1是星期几
		//计算最大值的那一天是星期几
		Calendar c=Calendar.getInstance();//获取当前时间
		c.set(Calendar.YEAR,2014);//把年设置为2014年,Calendar的时间设置需要从大到小处理!
		c.set(Calendar.MONTH,Calendar.APRIL);//把月设置为4月
		c.set(Calendar.DATE,1);//把日设置为1日
		//c.set(Calendar.DAY_OF_MONTH,1);//也是将日期设置为1日
		
		int dayOfWeek=c.get(Calendar.DAY_OF_WEEK);//输出2014年4月1日是星期几
		System.out.println(dayOfWeek);//输出为3表示星期二,因为星期日为1
		if(c.get(Calendar.DAY_OF_WEEK)==Calendar.TUESDAY) {
			System.out.println("这是星期二");
		}
		
		//计算2014-6-1是星期几
		c.set(Calendar.MONTH,Calendar.JUNE);
		int day=c.get(Calendar.DAY_OF_WEEK);
		System.out.println(day);//输出2014-6-1是星期几,1是星期日
		if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY) {
			System.out.println("这是星期日");
		}
		
		//计算最大值的那一天是星期几
		long max=Long.MAX_VALUE;//long类型
		Calendar c1=Calendar.getInstance();//当前时间
		c1.setTimeInMillis(max);//将c1改为最后一天的毫秒数
		int year=c1.get(Calendar.YEAR);
		int month=c1.get(Calendar.MONTH);
		int day1=c1.get(Calendar.DATE);
		int week=c1.get(Calendar.DAY_OF_WEEK);
		System.out.println(year);//292278994
		System.out.println(month);//7
		if(month==Calendar.AUGUST) {
			System.out.println("这是八月");
		}
		System.out.println(day1);//17,17日
		System.out.println(week);//1
		if(week==Calendar.SUNDAY) {
			System.out.println("这是星期日");
		}		
	}

get获取时间分量:

add方法:void add(intfiled,int month):为给定的时间分量的值加上给定的值,若给定的值是负数则是减去给定的值。

public void testAdd() {
		Calendar c=Calendar.getInstance();
		c.add(Calendar.YEAR, 1);//时间分量加法,加一年
		c.add(Calendar.MONTH, -3);//时间分量减法,减3个月
		SimpleDateFormat fmt=new SimpleDateFormat();
		System.out.println(fmt.format(c.getTime()));//19-1-9 上午9:30,Calendar转换为Date输出
	}

getActualMaximum(intfiled)方法:给定Calendar的时间值,返回指定日历字段可能拥有的最大值,一般返回月份的天数的时候有用。

public void testCalendar3() {
		Calendar c=Calendar.getInstance();
		//获取当前时间(当前月份)的最大天数
		int maxDays=c.getActualMaximum(Calendar.DAY_OF_MONTH);
		System.out.println(maxDays);//30
	}

总结:

关于Java的时间:

1、Java的时间是long类型的毫秒数

2、人类的时间系统:年月日时分秒

3、Java提供了API解决Java时间和人类时间之间的计算。

4、Date:简单封装时间

    Calendar:复杂的历法算法,可以获取设置时间分量,以及进行复杂的时间分量计算

    SimpleDateFormat:提供了时间的输入与输出

                  时间的输入:“2014-04-01“->Date(long)

                  时间的输出:Date(long)->”2014-04-01”

5、时间API的使用

    Date 是时间类型简单封装

    Calendar 用于复杂时间计算

    SimpleDateFormat 输入与输出



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值