Day17 包装类 日期
包装类:八大基本类型的包装
指的是将八大基本类型进行了包装,将基本类型转换成了引用类型.同时具备了面向对象的特点
八大基本类型的包装类:
int-Integer
byte-Byte
short-Short
double-Double
float-Float
long-Long
char-Character
boolean-Boolean
例如:将int转换成Integer
将Integer转换成int
int类型怎么转换成Integer类型:
- 通过构造方法来转换
- Integer i =new Integer(10);
- 建议使用Integer中的静态方法:valueOf()(建议使用)
为什么建议使用valueOf来转换?
因为valueOf这个方法就相当于是字符串中的常量池,也维护了一些可重用的数值对象,但是这个数值是有范围的,只要byte的取值范围之内,所有的数值是用的同一个,一旦超出byte范围,就会生成新的对象
字符串如何转换成int类型
- Integer.valueOf(String str):
将str字符串转换成Integer类型
(注意:所转的str字符串必须是一个可以转的数字类字符串)
- Integer.parseInt(String str):
总结:
将int转换成Integer类型:
1.构造方法
2.valueOf()
将Integer转换成int类型:
intValue()
如何将字符串转换成int类型
Integer.valueOf()
Integer.parseInt()
如何将int转成字符串类型:
toString()
java的核心:面向对象(针对引用类型)
70%将字符串转换成整数类型
枚举类型:enum
InterDemo1
public class InterDemo1 {
public static void main(String[] args) {
//xuanZe(Week.MON);
// int a=10;
//String str="123"
//Integer i=new Integer(10);//自动装箱
Integer i =10;//自动装箱
int a=i;//自动拆箱
Integer i3=new Integer(10);
Integer i4=new Integer(10);
Integer i5=Integer.valueOf(127);
Integer i6=Integer.valueOf(127);
System.out.println(i3==i4);//false 因为已经赋给i变成引用类型 比较地址
System.out.println(i5==i6);//true 没有超byte的最大值127
Integer i7=Integer.valueOf(128);
Integer i8=Integer.valueOf(128);
System.out.println(i7==i8);//false 超了byte的最大值 会新生成对象0
String str="123";
//自动装箱,相当于下面两段段代码的结合
int b=Integer.valueOf(str);
// Integer a= Integer.valueOf(str);
/*
* intValue():是将Integer类型转换成int类型
*/
//int b=a.intValue();
System.out.println(b+1);//124
str="456";
b=Integer.parseInt(str);
System.out.println(b+1);//457
}
public static void xuanZe(Week week) {
switch (week) {
case MON:
System.out.println("周一");
break;
case TUE:
System.out.println("周二");
break;
case WED:
System.out.println("周三");
break;
case THU:
System.out.println("周四");
break;
case FRI:
System.out.println("周五");
break;
default:
break;
}
}
}
Week
public enum Week {
MON,TUE,WED,THU,FRI
}
日期
日期操作:Date类型
getTime():获取当前date表示的时间的毫秒值
- 将Date转换成毫秒值(long)
setTime(long time):将毫秒值设置成Date类型
- 将毫秒值(long)转换成Date类型
calendar日期操作:主要是用来设置时间分量的
set():设置时间分量的方法
get():获取时间分量的方法
add():增加时间分量
SimpleDateFormat
String和Date类型进行转换
String format(Date date):将Date类型转换成String类型
Date parse(String str):将String类型转换成Date类型
Date<–>Calendar
Date<–>String
SimpleDateFormat的构造方法是用来设置要转换成为的日期格式
yyyy:表示年份的格式
MM:表示的是月份
dd:表示的是月中天
DD:表示的是年中天
HH:表示的是24小时制的小时
hh:表示的是12小时制的小时
mm:表示的是分钟
ss:表示的是秒
总结:Date Calendar SimpleDateFormat
由于Date只能转换成毫秒值来计算,而Calendar提供了几个方法可以用来快速设置和获取时间分量,但是Date和Calendar直接显示的日期格式又不太友好,所以又有了SimpleDateFormat来转换成我们日常习惯的日期格式(字符串日期格式)
Date:getTime() setTime()
Calendar:getTime() setTime()
SimpleDataFormat:format() parse()
DateDemo1
import java.util.Date;
/**
* 日期操作:Date类型
*
*
*/
public class DateDemo1 {
public static void main(String[] args) {
Date date= new Date();
System.out.println(date);
/**
* getTime():获取当前date表示的时间的毫秒值
* -将Date转换成毫秒值(long)
* setTime(long time):将毫秒值设置成Date类型
* -将毫秒值(long)转换成Date类型
*/
long time=date.getTime();
System.out.println(time);//1626838717782
//计算2天11小时之后的日期是什么?
long l=2l*24*60*60*1000+11*60*60*1000;
System.out.println(l);
long time2=time+l;
date.setTime(time2);
System.out.println(date);
}
}
CalendarDemo1
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo1 {
public static void main(String[] args) {
/**
* 因为Calendar是一个抽象类,不能直接new对象,所以
* Calendar提供一个静态方法给我们创建对象
*
* 由于Calendar方便操作日期,但是查看起来不方便,格式很长,很乱
* 所以Calendar也提供了两个方法用来和Date类型之间进行转换
* getTime()
* setTime()
*
*/
Calendar c=Calendar.getInstance();
System.out.println(c);
Date date=c.getTime();
System.out.println(date);
//2008年08月08日08时08分08秒
c.set(Calendar.YEAR,2008);//设置年份
/**
* 注意月份是从0开始算的,所以8月我们应该设置成为数字7
* 2.星期是从周天开始算的一周的第一天,所以设置星期的时候
* 我们也应该将对应星期数值减一
*/
c.set(Calendar.MONTH, 7);//设置月
/**
* DAY_OF_MONTH:月中天(一个月中的第几天)
* DAY_OF_YEAR:(一年当中的第几天)
* DAY_OF_WEEK:(一周中的第几天)
*/
c.set(Calendar.DAY_OF_MONTH,8);//设置日
/**
* HOUR:12小时制
* HOUR_OF_DAY:24小时制
*/
c.set(Calendar.HOUR_OF_DAY,8);//时
c.set(Calendar.MINUTE,8);//分
c.set(Calendar.SECOND,8);//秒
//set有重载的方法,可以一次性设置所有的时间分量
//c.set(2008,7,8,8,8,8);
date=c.getTime();
System.out.println(date);
Date d=new Date();
c.setTime(d);
System.out.println(d);
int year=c.get(Calendar.YEAR);
System.out.println(year);//获取年份
int month=c.get(Calendar.MONTH);//获取月份
System.out.println(month);//6
int day=c.get(Calendar.DAY_OF_WEEK);//获取周十天
System.out.println(day);//4
/**
* 查看1999年7月12日是周几?
*/
}
}
CalendarDemo1L1
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo1L1 {
public static void main(String[] args) {
Calendar c=Calendar.getInstance();
/*c.set(1999,6,12);
int week=c.get(Calendar.DAY_OF_WEEK);
System.out.println(week-1);*/
/**
* 查看1997年7月7日,2年2个月30天以前,是周几
*/
c.set(1997,6,7);
Date date=c.getTime();//将1997年7月7日的日期转换成Date()类型
System.out.println(date);
long time=date.getTime();//将Date类型转换成毫秒值
time=time-((365l*24*60*60*1000*2l)+(2*30*24*60*60*1000)+(31*24*60*60*1000));
date.setTime(time);//将计算完之后的毫秒值转换成Date类型
System.out.println(date);
c.setTime(date);//将Date类型转换成Calendar
int day=c.get(Calendar.DAY_OF_WEEK);//通过Calendar直接获取周中天
System.out.println(day-1);
/**
* add():增加时间分量
*/
c.set(1997, 6,7);
c.add(Calendar.YEAR, -2);
c.add(Calendar.MONTH, -2);
c.add(Calendar.DAY_OF_MONTH, -30);
day=c.get(Calendar.DAY_OF_WEEK);
System.out.println(day-1);
}
}
SimpleDateFormatDemo1
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SimpleDateFormatDemo1 {
public static void main(String[] args) {
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String str=sdf.format(date);
System.out.println(str);//2021-07-21
//如何将已知的一个字符串 2008-08-08转换成Date类型
//str="2008-08-08";
try {
date = sdf.parse(str);
System.out.println(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 在控制台输入生日日期,例如:1996-06-05
* 计算出带目前为止活了多少天
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入生日日期");
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
String birth=sc.next();
try {
Date date1=new Date();
date1 = sdf2.parse(birth);
long time1=date1.getTime();
Date date2=new Date();
long time2=date2.getTime();
long time3=time2-time1;
long day=time3/1000/60/60/24;
System.out.println("活到现在为"+day+"天");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 1.已知某酸奶的生产日期:手动在控制台输入
* 酸奶的包质值:手动在控制台输入
* 计算酸奶的促销日期
* 如果酸奶的促销日期是过期日期的前一周的周三
* 问该酸奶的促销日期是多少
*
* 2.计算出2009年8月9日的前3年4个月14天 是周几?
*
* 3.在控制台输入一个身份证号码,计算出这个人
* 出生那天是周几?
*/
}
}