第十三天下(日期Data,SimpleDateFormat,LocalDateTime,计算年月日Period,计算时分秒Duration,异常两种处理方式,Throwable,自定义异常)
Posted 下雨烨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十三天下(日期Data,SimpleDateFormat,LocalDateTime,计算年月日Period,计算时分秒Duration,异常两种处理方式,Throwable,自定义异常)相关的知识,希望对你有一定的参考价值。
目录
日期类
Data类
//显示当前电脑时间
Date date1 = new Date();
System.out.println(date1);
//从计算机时间原点开始,过了指定毫秒的哪个时间
Date date2 = new Date(0L);
System.out.println(date2);//从时间原点开始,过了0毫秒
Date类常用方法
public static void main(String[] args)
// method1();
//设置时间,传递毫秒值
Date date2 = new Date();
date2.setTime(0L);
System.out.println(date2);
private static void method1()
//把当前时间封装成一个date对象
Date date1 = new Date();
//获取这个date对象的毫秒值,也就是获取当前时间的毫秒值
long time = date1.getTime();
System.out.println(time);
SimpleDateFormat概述
JDK
SimpleDateFormat可以对Date对象,进行格式化和解析。
常用的模式字母及对应关系
y 年
M 月
d 日
H 时
m 分
s 秒
SimpleDateFormat的 构造方法
SimpleDateFormat 格式化和解析日期
1.格式化(从date到String) public final String format(Date date):将日期格式化成日期/时间字符串。
2.解析(从String到Date) public Date parse(String source):从给定字符串的开始解析文本以生成日期
//格式化
//当前时间的date对象
Date date = new Date();
//创建了一个日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String result1 = sdf.format(date);
System.out.println(result1);//2022年10月22日 16:50:48
//解析
String s="2022年10月22日 16:50:48";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date2 = sdf1.parse(s);
System.out.println(date2);//Sat Oct 22 16:50:48 CST 2022
LocalDateTime概述
public static void main(String[] args)
//获取当前系统时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
LocalDateTime of = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(of);
LocalDateTime获取方法
LocalDateTime of = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(of);
//获取年
int year = of.getYear();
System.out.println(year);//2020
//获取月份
int monthValue = of.getMonthValue();
System.out.println(monthValue);//11
//获取星期
DayOfWeek dayOfWeek = of.getDayOfWeek();
System.out.println(dayOfWeek);//WEDNESDAY
//获取分钟
int minute = of.getMinute();
System.out.println(minute);//11
LocalDateTime转换法
LocalDateTime of = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(of);
//保留年月日
LocalDate localDate = of.toLocalDate();
System.out.println(localDate);//2020-11-11
//保留时分秒
LocalTime localTime = of.toLocalTime();
System.out.println(localTime);//11:11:11
LocalDateTime格式化和解析
JDK8的日期格式化器:DateTimeFormatter
格式化
LocalDateTime LDT = LocalDateTime.of(2022, 11, 12, 13, 14, 15);
sout(LDT);//2022-11-12T13:14:15
//publiuc String format(指定格式)把一个localDatetime格式化为一个字符串
//用格式化器DateTimeFormatter的ofPattern方法
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String s = LDT.format(pattern);
System.out.println(s);//2022年11月12日 13:14:15
解析
//public static LocalDateTime parse(准备解析的字符串,解析格式)
//静态的直接类名.方法名调用就行
String s="2000年11月12日 13:14:15";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//传入格式化对象dateTimeFormatter
LocalDateTime parse = LocalDateTime.parse(s, dateTimeFormatter);
System.out.println(parse);//2000-11-12T13:14:15
LocalDateTime增加或者减少时间的方法
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
LocalDateTime newlocalDateTime = localDateTime.plusYears(1);
System.out.println(newlocalDateTime);//2021-11-12T13:14:15
System.out.println(localDateTime);//2020-11-12T13:14:15
注意点:1. 返回一个新的LocalDateTime对象,返回值就是修改后的结果。
2. 参数为正,就往后加。参数为负,就王往前减。
LocalDateTime时间修改方法
public static void main(String[] args)
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
LocalDateTime localDateTime1 = localDateTime.withYear(2048);
System.out.println(localDateTime1);
Period
public static void main(String[] args)
//public static Period between(开始时间,结束时间)计算两个“时间”的间隔
LocalDate localDate1 = LocalDate.of(2020, 1, 1);
LocalDate localDate12= LocalDate.of(2048, 12, 12);
Period period = Period.between(localDate1,localDate12);
System.out.println(period);//P28Y11M11D
//获取这段时间年数
System.out.println(period.getYears());//28
//获取月数
System.out.println(period.getMonths());//11
//获取天数
System.out.println(period.getDays());//11
//获取这段时间总月数
System.out.println(period.toTotalMonths());//347
Duration
public static void main(String[] args)
//public static Duration between(开始时间,结束时间) 计算两“时间”的间隔
LocalDateTime localDateTime = LocalDateTime.of(2020, 1, 1, 13, 14, 15);
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 1, 2, 11, 12, 13);
Duration duration = Duration.between(localDateTime,localDateTime1);
System.out.println(duration);//PT21H57M58S
//获取这段间隔秒
System.out.println(duration.toSeconds());//79078
//获取这段间隔毫秒
System.out.println(duration.toMillis());//79078000
//获取这段间隔纳秒
System.out.println(duration.toNanos());//79078000000000
JDK8时间小结
LocalDate 表示日期(年月日)
LocalTime表示时间(时分秒)
LocalDateTime表示时间+日期(年月日时分秒)
时间转换:
创建时间对象(now,of)
获取时间对象中的年月日时分秒
格式化(fomat)
解析(parse)
增加减少时间的方法(plus开头,minus开头)
修改时间(with开头)
计算时间间隔的两个类:
Period Duration
异常
异常:就是程序踹西安了不正常的情况。程序再执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
注意:语法错误不算在异常体系中。
JVM默认处理方案
如果程序出现了问题,我们没有做任何处理,最终JVM会做默认的处理。
-
把异常的名称,异常原因及一场踹西安的位置等信息输出在控制台。
-
程序停止执行。
异常处理方式
1.自己不处理,交给调用者处理
throws
格式:throws 异常类名;
注意:这个格式是写在方法的定义出,表示声明一个异常。
编译时异常因为再编译时就会检查,所以必须要写在方法后面进行显示声明
运行时异常因为在运行时才会发生,所以在方法后面可以不写
public class Test01
public static void main(String[] args) throws ParseException
//metom1();//此时调用者也没有处理,也是交给jvm虚拟机处理
method2();//还是继续交给调用者处理,而main方法的调用者是虚拟机还是采取虚拟机默认的处理异常方法。
//throws作用,告诉调用者,有可能会出现这样的错误,
//如果方法中没有出现异常,那么程序正常执行。
//如果出现了异常也是交给 调用者处理
//如果声明的异常 是一个运行时异常,那么声明的代码可以省略。
public static void metom1()throws NullPointerException
int[] arr = null;
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
//告诉调用者,有可能会出现这样的错误,
//如果方法中没有出现异常,那么程序正常执行。
//如果出现了异常也是交给 调用者处理
//如果声明的异常是编译时异常,所以必须手动对异常进行声明
private static void method2() throws ParseException
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
sdf.parse("2048-10-10");
抛出异常对象---throw
思考:以前出现了异常,虚拟机帮我们创建一个异常对象,抛给调用者。但是如果我们需要自己手动创建一个异常对象该如何写。
格式:throw new 异常();
public static void main(String[] args)
System.out.println("家里有个貌美如花的老婆");
System.out.println("还有一个当官的兄弟");
System.out.println("自己还有一个买卖");
System.out.println("这样的生活你要不要?");
throw new RuntimeException();//当代码执行到这里,就创建一个异常对象
//该异常创建之后,暂时没有手动处理,抛给了调用者处理
//下面的代码不会再执行了。
System.out.println("武大郎的标准生活");
throws和throw的区别
抛出处理异常的意义
在方法中,当传递的参数有无,没有继续运行下去的意义了,则采取抛出处理,表示让该方法结束运行。 告诉调用者方法中出现了问题
异常处理方式----try...catch....
public static void main(String[] args)
// int[] arr = 1,2,3,4,5;
int[] arr = null;
//好处:为了能让代码继续往下运行
try
//有可能发现异常的代码
prinArr(arr);
catch (NullPointerException e)
//如果发现异常,就进行这样的操作
System.out.println("参数不能为null");//参数不能为null
System.out.println("hello");// 代码继续往下运行hello
/*prinArr(arr);//调用者就会收到一个异常
//自己处理一下自己的异常*/
private static void prinArr(int[] arr)
if (arr == null)
//调用者知道成功打印了吗?
//System.out.println("参数不能为null");
throw new NullPointerException();//当参数为null的时候
//手动创建一个异常对象,抛给调用者
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
好处:让代码继续往下运行
Throwable的成员方法
public static void main(String[] args)
try
int[] arr = 1,2,3,4,5;
System.out.println(arr[10]);//虚拟机自动帮我们创建了个new ArrayIndexOutOfBoundsException对象
catch (ArrayIndexOutOfBoundsException e)
String message = e.getMessage();//返回此throwable详细消息字符串
System.out.println(message);//Index 10 out of bounds for length 5
String s = e.toString();//返回此抛出异常的简短描述
System.out.println(s);//java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5
e.printStackTrace();//红色字体打印异常情况
System.out.println("嘿嘿嘿");//继续执行嘿嘿嘿
两种处理方式的小结
抛出 throw throws
-
在方法中,当传递的参数有误,没有继续运行下去的意义了,再采取抛出处理。表示让该方法结束运行。
-
告诉调用者出现了问题。
捕获 try...cath
-
捕获:能让代码继续运行下去。
自定义异常
为了让异常信息更加的见名之意。
定义完异常,可以调用异常。
1.定义异常类
2.写继承关系
3.空参构造
4.有参构造
//AgeChaoChuFanWei见名知意
public class AgeChaoChuFanWei extends RuntimeException
public AgeChaoChuFanWei()
public AgeChaoChuFanWei(String message)
super(message);
以上是关于第十三天下(日期Data,SimpleDateFormat,LocalDateTime,计算年月日Period,计算时分秒Duration,异常两种处理方式,Throwable,自定义异常)的主要内容,如果未能解决你的问题,请参考以下文章
『PyTorch』第十三弹_torch.nn.init参数初始化
第十三届蓝桥杯省赛C++B组 真题题解(详细讲解+代码分析)看这篇就够了~~~
第十三届蓝桥杯省赛C++B组 真题题解(详细讲解+代码分析)看这篇就够了~~~
2022 第十三届蓝桥杯大赛软件赛省赛,C/C++ 大学B组题解