自动装箱和拆箱操作:
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日的这个时间
}
日期模式匹配字符:
y 年 yyyy年----2013年,yy----13年
M 月 MM月----01月,M----1月
d 日 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 输入与输出