JDK7的日期时间类

Date类

Date类表示时间,时间可以精确到毫秒。创建一个Date对象,其实就表示时间的对象。

1 Date date1=new Date(); //当前系统时间
2 
3 Date date2=new Date(0L);  //1970年1月1日8点0时0分  (中国)
4 
5 Date date3=new Date(1000L*60*60*24); //1970年1月2日8点0时0分  (中国)

获取和设置时间

1 Date date=new Date(); //当前系统时间
2 //设置时间为
3 date.setTime(1000L*60*60*24); //1970年1月2日8点0时0分  (中国)
4 
5 //获取时间
6 long time=date.getTime(); //1000L*60*60*24
7 System.out.println(time); //毫秒值 

SimpleDateFormat类

SimpleDateFormat类可以对日期进行格式化和解析的操作。

 1 SimpleDateFormat在进行日期格式化或者解释时,需要识别一些特定符号
 2     yyyy:    年              1999年
 3     MM:        年中的月      8月
 4     dd:        月中的天      28日
 5     HH:        天中的小时     16时
 6     mm:        时中的分      20分
 7     ss:        分中的秒      18秒
 8     SS:        毫秒
 9     
10 格式化:Date对象转换为字符串
11         
12 解析: 字符串转换为Date对象
13         
14 //在进行日期格式化和解析之前,必须使用以上的符号创建SimpleDateFormat对象,来指定日期或者时间的格式
15 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");

下面是格式化和解析的代码

1 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
2 
3 //1.日期格式化:Date对象-->String
4 String str=sdf.format(new Date()); //把当前时间格式化为字符串
5 
6 //2.日期解析:String --> Date对象
7 Date date=sdf.prase("1992年08月09日 16时24分18秒"); 

练习:键盘录入一个生日(格式:yyyy-MM-dd),计算当前的年龄是多少?

 1 //键盘录入字符串生日
 2 Scanner sc=new Scanner(System.in);
 3 System.out.println("请输入你的生日(格式:yyyy-MM-dd):");
 4 String birthday=sc.next();
 5 
 6 //把生日的字符串,转换为Date
 7 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
 8 Date date1=sdf.prase(birthday); //生日那天的Date对象
 9 long time1=date1.getTime(); //生日那天的毫秒值 
10 
11 //获取当前时间的毫秒值
12 long time2=System.currentTimeMills(); //当前时间的毫秒值
13 
14 //计算时间差
15 long age=(time2-time1)/1000/60/60/24/365;
16 System.out.println("年龄为:"+age);

JDK8新增的日期类

LocalDateTime获取对象

LocalDateTime类 可以表示时间的(年、月、日、时、分、秒)

1 public static LocalDateTime now()
2     获取当前的系统时间LocalDateTime对象
3 public static LocalDateTime of(int y,int m,int d,int h,int m,int s)
4     获取指定时间的LocalDateTime对象

代码演示

1 //获取当前时间对象
2 LocalDateTime ldt1 = LocalDateTime.now();
3 
4 //获取指定时间对象,2011年11月11日10点10分10秒
5 LocalDateTime ldt2 = LocalDateTime.of(2011,11,11,10,10,10);

LocalDateTime的获取方法

 1 public int getYear()
 2     获取年
 3 public int getMonthValue()
 4     获取月
 5 public int getDayOfMonth()
 6     获取月中的天
 7 public int getDayOfYear()
 8     获取年中的天
 9 public DayOfWeek getDayOfWeek()
10     获取星期中的第几天
11 public int getHour()
12     获取小时
13 public int getMinute()
14     获取分钟
15 public int getSecond()
16     获取秒

LocalDateTime的转换方法

 1 三者的区别
 2     LocalDateTime: 包含年、月、日、时、分、秒
 3     LocalDate: 包含年、月、日
 4     LocalTime:  包含时、分、秒
 5     
 6 可以通过LocalDateTime转换为LocalDate和LocalTime
 7     public LocalDate toLocalDate()
 8         把LocalDateTime转换为LocalDate
 9     public LocalTime toLocalTime()
10         把LocalDateTime转换为LocalTime

LocalDateTime的格式化和解析

1 public String format(DateTimeFormatter formatter)  
2     格式化:把LocalDateTime转换为String
3 static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)  
4     解析:把字符串转换为LocalDateTime对象

日期格式化代码演示

1 //获取当前时间的LocalDateTime对象
2 LocalDateTime localDateTime = LocalDateTime.now();
3 
4 //创建日期格式化器
5 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
6 
7 //格式化
8 String str=localDateTime.format(formatter);
9 System.out.println(str);

日期解析的代码演示

1 //创建日期格式化器
2 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
3 
4 //日期解析
5 LocalDateTime localDateTime= LocalDateTime.parse("2020-08-23 15:19:39",formatter);
6 
7 //...后面就可以使用LocalDateTime的方法,对时间进行操作

LocalDateTime加减运算方法

 1 public LocalDateTime plusYears(int n)
 2     加、减年  (正数表示增加、负数表示减少) 
 3 public LocalDateTime plusMonths(int n)
 4     加、减月
 5 public LocalDateTime plusDays(int n)
 6     加、减日
 7 public LocalDateTime plusHours(int n)
 8     加、减时
 9 public LocalDateTime plusMinutes(int n)
10     加、减分
11 public LocalDateTime plusSeconds(int n)
12     加、减秒

LocalDateTime设置时间的方法

 1 public LocalDateTime withYear(int n)
 2     设置年
 3 public LocalDateTime withMonth(int n)
 4     设置月
 5 public LocalDateTime withDay(int n)
 6     设置日
 7 public LocalDateTime withHour(int n)
 8     设置时
 9 public LocalDateTime withMinute(int n)
10     设置分
11 public LocalDateTime withSecond(int n)
12     设置秒

时间间隔类

Period类

计算两个时间间隔的年、月、日。

 1 //生日的时间
 2 LocalDate localDate1 = LocalDate.of(1996, 6, 23);
 3 
 4 //今天的时间
 5 LocalDate localDate2 = LocalDate.now();
 6 
 7 //获取时间间隔对象
 8 Period period = Period.between(localDate1,localDate2);
 9 
10 //获取相隔的年
11 int years = period.getYears();
12 System.out.println(years);
13 
14 //获取相隔月
15 long totalMonths = period.getMonths();
16 System.out.println(totalMonths);
17 
18 //获取相隔的日
19 int days = period.getDays();
20 System.out.println(days);

Duration类

计算两个时间间隔的时、分、秒

 1 //当时间
 2 LocalDateTime localDate1 = LocalDateTime.now();
 3 //国庆时间
 4 LocalDateTime localDate2 = LocalDateTime.of(2021, 10, 1,0,0,0);
 5 
 6 //获取时间间隔对象
 7 Duration duration = Duration.between(localDate1,localDate2);
 8 
 9 //获取相隔总共小时数
10 long hour = duration.toHours();
11 //获取相隔的总共分钟数
12 long minutes = duration.toMinutes();
13 //获取相隔的总共秒数
14 long seconds = duration.toSeconds();
15 //相隔的总共毫秒秒数
16 long millis = duration.toMillis();
17 
18 System.out.println("-----------");
19 
20 //获取相隔天的部分
21 long day = duration.toDaysPart();
22 //获取相隔小时的部分
23 int hoursPart = duration.toHoursPart();
24 //获取相隔分钟的部分
25 int minutesPart = duration.toMinutesPart();
26 //获取相隔秒的部分
27 int secondsPart = duration.toSecondsPart();
28 System.out.println("距离今年国庆放假还有:"+day+"天"+hoursPart+"小时"+minutesPart+"分钟"+secondsPart+"秒");

异常

异常其实就是程序在编译和运行时期的一些不正常的异常。 Java的工程师们,把一些常见的问题都封装了异常类 ,在API中给你列举出来了。当我们使用Java语言写代码的时候,可能会出现这些问题,当出现这些问题的时候,就可以去API中找,哪里出现了问题。

异常类的继承体系

1 Throwable 是所有异常和错误的根类
2     Error: 错误,不能解决的问题。
3     Exception: 异常,可以解决的问题。
4         RuntimeException: 运行时异常,在运行时才出现问题
5         非RuntimeException:编译时异常,编译时有问题。

异常的处理

虚拟机自己处理

直接停止程序运行,然后把异常信息打印在控制台

try…catch手动处理

1 try{
2     //检查代码中是否有异常
3 }catch(异常类 e){
4     //如果try中有异常,就会被catch捕获到
5 }
6 
7 好处:处理之后的代码还可以继续执行

throws 声明异常

throws用在方法上,用来声明一个方法它可能会有异常

1 //如果一个方法后面有throws声明异常,那么调用方法的时候就需要处理异常。
2 public static void method(String str) throws ParseException {
3     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
4     Date date = sdf.parse(str);
5     System.out.println(date);
6 }

Throwable的方法

1 public  String getMessage()  
2     获取异常信息
3 public String toString()  
4     返回异常类名+异常信息
5 public void printStackTrace() 
6     打印详细的异常信息

throw 产生一个异常

如果你是写API的人,在写方法的时候,会考虑到方法的调用者传递非法的参数。你必须先对这些参数左一些合法性的校验,如果不通过,告诉调用者一个异常。

 1 public static void main(String[] args) {
 2     sale(7);
 3 }
 4 
 5 public static void sale(int money){
 6     if(money==5||money==10){
 7         System.out.println("钱是真的,可以正常买东西");
 8     }else{
 9         throw new RuntimeException("钱是假的,我报警了,等着!!!");
10     }
11 }

自定义异常

如果在写一个方法的时候,API中提供的异常类,还不足以说明程序的问题。你就可以自己定义一个异常类

1 自定义异常类的步骤:
2     1.写一个类继承Exception或者RuntimeException
3     2.自动生成两个构造方法
4     
5 注意:自定义异常,名称一定要见名知意(最好是能够使用异常类的名称,来说明问题)

原文地址:https://www.cnblogs.com/xujun168/p/14787401.html