Java 之Data,SimpleDateFormat类,JDK8时间日期类,throw抛出异常

Date类:

表示时间

1s = 1000ms

计算机中的起始时间:1970年1月1日

Date类概述和构造方法:

方法名 说明
public Date() 创建一个Date对象,表示默认时间
public Date(long date) 创建一个Date对象,表示指定时间
public long getTime() 获取时间对象的毫秒值
public void setTime(long time) 设置时间,传递毫秒值

时间对象 --> 毫秒值

long 毫秒值 = 事件对象.getTime()

毫秒值 —> 时间对象

Date 时间对象 = new Date(毫秒值)

import java.util.Date;

public class DateDemo1 {
    
    
    public static void main(String[] args) {
    
    

        Date date1 = new Date();//当前时间
        System.out.println(date1);

        Date date2 = new Date(0L);//从原点开始过了0ms
        System.out.println(date2);

        Date date3  = new Date(3600L * 1000);
        System.out.println(date3);
        //method1();

        /*Date date1 = new Date();
        date1.setTime(0L);
        System.out.println(date1);*/
    }

    private static void method1() {
    
    
        //获取这个date对象的毫秒值 ---- 获取当前时间的毫秒值
        Date date3 = new Date();
        long time = date3.getTime();
        System.out.println(time);

        long time2 = System.currentTimeMillis();
        System.out.println(time);
    }
}

SimpleDateFormat类

展示时间

  • SimpleDateFormat类概述

    ​ SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

    ​ 我们重点学习日期格式化和解析

  • SimpleDateFormat类构造方法

方法名 说明
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        //格式化:从date到string
        //当前时间的date对象
        Date date = new Date();
        //创建了一个日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
        //转为字符串
        String s = sdf.format(date);
        System.out.println(s);

        System.out.println("-----------");

        //解析:从string到date
         String sc = "2048-01-01";
         SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        //转换为date
         Date date1 = sd.parse(sc);
        System.out.println(date1);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateDemo2 {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        //抢东西的开始时间和结束时间
        String start = "2020年11月11日 0:0:0";
        String end = "2020年11月11日 0:10:0";
        //两个人抢东西的时间
        String jia = "2020年11月11日 0:03:47";
        String pi = "2020年11月11日 0:10:11";
        //设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //将开始的日期格式化
        long startTime = sdf.parse(start).getTime();
        long endTime = sdf.parse(end).getTime();

        long  s1 = sdf.parse(jia).getTime();
        long s2 = sdf.parse(pi).getTime();
        //判断
        if(s1 >= startTime && s1 <= endTime){
    
    
            System.out.println("小贾抢到了");
        }else{
    
    
            System.out.println("小贾没抢到");
        }

        if(s2 >= startTime && s2 <= endTime){
    
    
            System.out.println("小皮抢到了");
        }else{
    
    
            System.out.println("小皮没抢到");
        }

    }
}

JDK8时间日期类

JDK8新增日期类 (理解)

  • LocalDate 表示日期(年月日)
  • LocalTime 表示时间(时分秒)
  • LocalDateTime 表示时间+ 日期 (年月日时分秒)

LocalDateTime创建方法 (应用)

  • 方法说明

    方法名 说明
    public static LocalDateTime now() 获取当前系统时间
    public static LocalDateTime of (年, 月 , 日, 时, 分, 秒) 使用指定年月日和时分秒初始化一个LocalDateTime对象

例子:

import java.time.LocalDateTime;

public class JDK8DateDemo2 {
    
    
    public static void main(String[] args) {
    
    
        //当前时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
         //指定时间
        LocalDateTime localDateTime = LocalDateTime.of(2020,11,11,11,11);
        System.out.println(localDateTime);
    }
}

LocalDateTime获取方法 (应用)

  • 方法说明

    方法名 说明
    public int getYear() 获取年
    public int getMonthValue() 获取月份(1-12)
    public int getDayOfMonth() 获取月份中的第几天(1-31)
    public int getDayOfYear() 获取一年中的第几天(1-366)
    public DayOfWeek getDayOfWeek() 获取星期
    public int getMinute() 获取分钟
    public int getHour() 获取小时

LocalDateTime转换方法 (应用)

  • 方法说明

    方法名 说明
    public LocalDate toLocalDate () 转换成为一个LocalDate对象
    public LocalTime toLocalTime () 转换成为一个LocalTime对象

LocalDateTime格式化和解析 (应用)

  • 方法说明

    方法名 说明
    public String format (指定格式) 把一个LocalDateTime格式化成为一个字符串
    public LocalDateTime parse (准备解析的字符串, 解析格式) 把一个日期字符串解析成为一个LocalDateTime对象
    public static DateTimeFormatter ofPattern(String pattern) 使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象
//jdk8之前与之后对比
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class JDK8DateDemo5 {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        //method1();
        //method2();

        //解析字符串
        String s = "1989年11月11日 13:14:13";
        //jdk8之前
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date = sdf.parse(s);
        int year = date.getYear() + 1900;
        System.out.println(year);

        //jdk8之后
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        LocalDateTime parse =LocalDateTime.parse(s,pattern);
        int dayOfYear = parse.getYear();
        System.out.println(dayOfYear);

    }
    //格式化字符串
    //jdk8之后
    public static void method1() {
    
    

        LocalDateTime localDateTime = LocalDateTime.of(2020,11,12,13,14,15);
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        String s = localDateTime.format(pattern);
        System.out.println(s);
    }
    //jdk8之前
    public static void method2() {
    
    
        Date date = new Date();
        //创建了一个日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
        String s = sdf.format(date);//转化为字符串
        System.out.println(s);
    }
}

LocalDateTime增加或者减少时间的方法 (应用)

  • 方法说明

    方法名 说明
    public LocalDateTime plusYears (long years) 添加或者减去年
    public LocalDateTime plusMonths(long months) 添加或者减去月
    public LocalDateTime plusDays(long days) 添加或者减去日
    public LocalDateTime plusHours(long hours) 添加或者减去时
    public LocalDateTime plusMinutes(long minutes) 添加或者减去分
    public LocalDateTime plusSeconds(long seconds) 添加或者减去秒
    public LocalDateTime plusWeeks(long weeks) 添加或者减去周
import java.time.LocalDateTime;

public class JDK8PlusDemo1 {
    
    
    public static void main(String[] args) {
    
    
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
        //修改年份
        //允许传递负数,正数往后加,负数往后减
        LocalDateTime localDateTime1 = localDateTime.plusYears(1);
        System.out.println(localDateTime1);
    }
}

LocalDateTime减少或者增加时间的方法 (应用)

  • 方法说明

    方法名 说明
    public LocalDateTime minusYears (long years) 减去或者添加年
    public LocalDateTime minusMonths(long months) 减去或者添加月
    public LocalDateTime minusDays(long days) 减去或者添加日
    public LocalDateTime minusHours(long hours) 减去或者添加时
    public LocalDateTime minusMinutes(long minutes) 减去或者添加分
    public LocalDateTime minusSeconds(long seconds) 减去或者添加秒
    public LocalDateTime minusWeeks(long weeks) 减去或者添加周
public class JDK8MinusDemo1 {
    
    
    public static void main(String[] args) {
    
    
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
        //减
        LocalDateTime localDateTime1 = localDateTime.minusDays(1);
        System.out.println(localDateTime1);
    }
}

LocalDateTime修改方法 (应用)

  • 方法说明

    方法名 说明
    public LocalDateTime withYear(int year) 直接修改年
    public LocalDateTime withMonth(int month) 直接修改月
    public LocalDateTime withDayOfMonth(int dayofmonth) 直接修改日期(一个月中的第几天)
    public LocalDateTime withDayOfYear(int dayOfYear) 直接修改日期(一年中的第几天)
    public LocalDateTime withHour(int hour) 直接修改小时
    public LocalDateTime withMinute(int minute) 直接修改分钟
    public LocalDateTime withSecond(int second) 直接修改秒
public class JDK8With {
    
    
    public static void main(String[] args) {
    
    
        //修改
        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 13, 14, 15);
        LocalDateTime localDateTime1 = localDateTime.withYear(2048);
        System.out.println(localDateTime1);
    }
}

Period (应用)

  • 方法说明

    方法名 说明
    public static Period between(开始时间,结束时间) 计算两个“时间"的间隔
    public int getYears() 获得这段时间的年数
    public int getMonths() 获得此期间的总月数
    public int getDays() 获得此期间的天数
    public long toTotalMonths() 获取此期间的总月数
import java.time.LocalDate;
import java.time.Period;

public class Demo1 {
    
    
    public static void main(String[] args) {
    
    
        //两个日期之间的间隔
        LocalDate lo1 = LocalDate.of(2020, 1, 1);
        LocalDate lo2 = LocalDate.of(2048, 12, 12);
        Period period = Period.between(lo1, lo2);
        System.out.println(period);//P28Y11M11D
        System.out.println(period.getYears());//28
        System.out.println(period.getMonths());//11并不是一共的月份
        System.out.println(period.getDays());//11  并不是一共的天数  而是1 与 12 相差
        System.out.println(period.toTotalMonths());//347总共多少月
    }
}

Duration (应用)

  • 方法说明

    方法名 说明
    public static Durationbetween(开始时间,结束时间) 计算两个“时间"的间隔
    public long toSeconds() 获得此时间间隔的秒
    public int toMillis() 获得此时间间隔的毫秒
    public int toNanos() 获得此时间间隔的纳秒
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Demo1 {
    
    
    public static void main(String[] args) {
    
    
        //不能用localdate
        LocalDateTime of1 = LocalDateTime.of(2020, 8, 21, 14, 44, 15);
        LocalDateTime of2 = LocalDateTime.of(2020, 10, 1, 13, 14, 15);
        Duration duration = Duration.between(of1, of2);//计算时间之间的间隔,
        System.out.println(duration);
        System.out.println(duration.toHours());
        System.out.println(duration.toSeconds());
        System.out.println(duration.toMillis());
    }
}

throws方式处理异常(应用)

  • 定义格式

    public void 方法() throws 异常类名 {
          
          
        
    }
    

    注意事项

    这个throws格式是跟在方法的括号后面的

编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理

运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理

throw抛出异常 (应用)

  • 格式

    throw new 异常();

  • 注意

    这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了

  • throws和throw的区别

    throws throw
    用在方法声明后面,跟的是异常类名 用在方法体内,跟的是异常对象名
    表示声明异常,调用该方法有可能会出现这样的异常 表示手动抛出异常对象,由方法体内的语句处理

try-catch方式处理异常(应用)

  • 定义格式

    try {
          
          
    	可能出现异常的代码;
    } catch(异常类名 变量名) {
          
          
    	异常的处理代码;
    }
    
  • 执行流程

    • 程序从 try 里面的代码开始执行

    • 出现异常,就会跳转到对应的 catch 里面去执行

    • 执行完毕之后,程序还可以继续往下执行

      注意

      1. 如果 try 中没有遇到问题,怎么执行?

        会把try中所有的代码全部执行完毕,不会执行catch里面的代码

      2. 如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?

        那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了
        当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码

      3. 如果出现的问题没有被捕获,那么程序如何运行?

        那么try…catch就相当于没有写.那么也就是自己没有处理.
        默认交给虚拟机处理.

      4. 同时有可能出现多个异常怎么处理?

        出现多个异常,那么就写多个catch就可以了.
        注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面

Throwable成员方法(应用)

  • 常用方法

    方法名 说明
    public String getMessage() 返回此 throwable 的详细消息字符串
    public String toString() 返回此可抛出的简短描述
    public void printStackTrace() 把异常的错误信息输出在控制台

转换:

字符串转换为日期:

DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy年MM月dd日");

//转换为日期LocalDate对象
LocalDate a1 = LocalDate.parse(date,sdf);
//获取当前日期
LocalDate a2 = LocalDate.now();

日期转换为字符串:

从控制台接收一个“日期”,格式:yyyy-MM-dd,程序将其转换为:xxxx年xx月xx日的格式输出到控制台。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Test04 {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入日期(yyyy-MM-dd):");
        String s = sc.nextLine();
        //设置日期格式 先转换为日期
        SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dt.parse(s);
        //设置格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        //转换为字符串
        String s1 = sdf.format(date);
        System.out.println(s1);

    }
}

猜你喜欢

转载自blog.csdn.net/qq_42073385/article/details/108157817