publicclassDateDemo02{publicstaticvoidmain(String[] args){//设置日期对象Date d =newDate();//public long getTime():获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值System.out.println(d.getTime());System.out.println(d.getTime()*1.0/1000/60/60/24/365+"年");//public void setTime(long time):设置时间,给的是毫秒值long time =1000*60*60;long currentTime =System.currentTimeMillis();
d.setTime(currentTime);System.out.println(d);}}
1.3、SimpleDateFormat类
SimpleDateFormat类概述
SimpleDateFormat是一个具体的类,用于区域设置敏感的方式格式化和解析日期
我们重点学习日期格式化和解析
SimpleDateFormat类构造方法
方法名
说明
public SimpleDateFormat()
构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern)
构造一个SimpleDateFormat使用给定模式和默认的日期格式
SimpleDateFormat类的常用方法
格式化(从Date到String):public final String format(Date date):将日期格式化成日期/时间字符串
解析(从String到Date):public Date parse(String source):从给定字符串的开始解析文本以生成日期
示例代码
publicclassSimpleDateFormatDemo{publicstaticvoidmain(String[] args)throwsParseException{//格式化:从Date到StringDate d =newDate();SimpleDateFormat sdf =newSimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String s = sdf.format(d);System.out.println(s);System.out.println("-----------");//从String到DateString ss ="2048-08-09 11:11:11";//ParseExceptionSimpleDateFormat sdf2 =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dd = sdf2.parse(ss);System.out.println(dd);}}
public LocalDateTime withDayOfMonth(int dayofmonth)
直接修改日期(一个月中的第几天)
public LocalDateTime withDayOfYear(int dayOfYear)
直接修改日期(一年中的第几天)
public LocalDateTime withHour(int hour)
直接修改小时
public LocalDateTime withMinue(int minute)
直接修改分钟
public LocalDateTime withSecond(int second)
直接修改秒
示例代码
publicclassJdk8DateDemo8{publicstaticvoidmain(String[] args){//public LocalDateTime withYear(int year):修改年LocalDateTime now =LocalDateTime.now();LocalDateTime newLocalDateTime = now.withYear(2048);System.out.println(newLocalDateTime);LocalDateTime localDateTime = newLocalDateTime.withMonth(20);//Invalid value for MonthOfYearSystem.out.println(localDateTime);}}
2.9、Period
方法说明
方法名
说明
public static Period between(开始时间,结束时间)
计算两个时间的间隔
public int getYears()
获取这段时间的年数
public int getMonths()
或者此期间的总月数
public int getDays()
获取此期间的天数
public long to TotalMonths()
获取此期间的总月数
示例代码
publicclassJdk8DateDemo9{publicstaticvoidmain(String[] args){//public static Period between(开始时间,结束时间):计算两个“时间”的间隔LocalDate localDate1 =LocalDate.of(2022,1,1);LocalDate localDate2 =LocalDate.of(2042,11,12);Period period =Period.between(localDate1, localDate2);System.out.println(period);//public int getYears():获取这段时间的年数System.out.println(period.getYears());//public int getMonths():获取此期间的月数System.out.println(period.getMonths());//public int getDays():获取此期间的天数System.out.println(period.getDays());//public long toTotalMonths():获取此期间的总月数System.out.println(period.toTotalMonths());}}
2.10、Duration
方法说明
方法名
说明
public static Durationbetween(开始时间,结束时间)
计算两个时间的间隔
public long toSeconds()
获取此事件间隔的秒
public int toMillis()
获得此事件间隔毫秒
public int toNanos()
获得此事件间隔的纳秒
示例代码
publicclassJdk8DateDemo{publicstaticvoidmain(String[] args){//public static Duration between (开始时间,结束时间):计算两个时间的间隔LocalDateTime localDateTime1 =LocalDateTime.of(2020,1,1,13,14,15);LocalDateTime localDateTime2 =LocalDateTime.of(2020,1,2,11,12,13);Duration duration =Duration.between(localDateTime1, localDateTime2);System.out.println(duration);//public long toSeconds():获取此事件间隔的秒System.out.println(duration.toMinutes());//public int toMillis():获取此事件间隔的毫秒System.out.println(duration.toMillis());//public int toNanos():获取此时间间隔的纳秒System.out.println(duration.toNanos());}}
3、异常
3.1、异常
异常的概述
异常就是程序出现了不正常情况
异常的结构体系
3.2、编译时异常和运行时异常的区别
编译时异常
都是Exception类及其子类
必须显式处理,否则程序就会发生错误,无法通过编译
运行时异常
都是RuntimeException类及其子类
无需显式处理,也可以和编译时异常一样处理
图示
3.3、JVM默认处理异常的方式
如果程序出现了问题,我们做任何处理,最终JVM会做默认的处理,处理方式有如下两个步骤:
把异常的名称,错误原因及异常出现的位置等信息输出在控制台
程序停止执行
3.4、查看异常信息
控制台在打印异常信息时,会打印异常类名,异常出现的原因,异常出现的位置
我们调bug时,可以根据提示,找到异常出现的位置,分析原因,修改异常代码
3.5、throws方式处理异常
定义格式
public void 方法() throws 异常类名{
}
示例代码
publicclassExceptionDemo{publicstaticvoidmain(String[] args)throwsParseException{System.out.println("开始");method2();method();System.out.println("结束");}//运行时异常privatestaticvoidmethod()throwsArrayIndexOutOfBoundsException{int[] arr ={1,2,3};System.out.println(arr[3]);}//编译时异常privatestaticvoidmethod2()throwsParseException{String s ="2048-08-09";SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");Date d = sdf.parse(s);System.out.println(d);}}
void ifPersentOrElse(Consumer<? super T > action,Runnalbe emptyAction)
如果不为空,,则使用该值执行给定的操作,否则执行给定的基于空的操作
示例代码
publicclassOptionalDemo3{publicstaticvoidmain(String[] args){method1();method2();method3();method4();}privatestaticvoidmethod4(){//Student s = new Student("zhangsan",23);Student s =null;Optional<Student> optional =Optional.ofNullable(s);//public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)、//如果不为空,则使用该值执行给定的操作,否则执行给定的基于空的操作。
optional.ifPresentOrElse(student ‐>System.out.println(student),()‐>System.out.println("为空了"));}privatestaticvoidmethod3(){//Student s = new Student("zhangsan",23);Student s =null;Optional<Student> optional =Optional.ofNullable(s);//ifPresent (Consumer<? super T> action)//如果不为空,则使用该值执行给定的操作,否则不执行任何操作
optional.ifPresent(student ‐>System.out.println(student));}privatestaticvoidmethod2(){Student s =newStudent("张三",23);Optional<Student> optional =Optional.ofNullable(s);//orElseGet(Supplier<? extends T>supplier)//如果不为空,则返回具体的值,否则返回由括号中函数产生的结果Student student = optional.orElseGet(()->newStudent("lisi",24));System.out.println(student);}privatestaticvoidmethod1(){Student s =null;Optional<Student> optional =Optional.ofNullable(s);//orElse(T other):如果不为空,则返回参数中的值Student student = optional.orElse(newStudent("李四",24));System.out.println(student);}}