javaSE--进阶六(时间类,异常类)

JDK7的日期时间类。

Date类

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

Date date1=new Date(); //当前系统时间

Date date2=new Date(0L);  //1970年1月1日8点0时0分  (中国)

Date date3=new Date(1000L*60*60*24); //1970年1月2日8点0时0分  (中国)

获取和设置时间

Date date=new Date(); //当前系统时间
//设置时间为
date.setTime(1000L*60*60*24); //1970年1月2日8点0时0分  (中国)

//获取时间
long time=date.getTime(); //1000L*60*60*24
System.out.println(time); //毫秒值

SimpleDateFormat类

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

SimpleDateFormat在进行日期格式化或者解释时,需要识别一些特定符号
	yyyy:1999年
	MM:		年中的月	  8月
	dd:		月中的天	  28日
	HH:		天中的小时	 16时
	mm:		时中的分	  20分
	ss:		分中的秒      18秒
	SS:		毫秒
	
//在进行日期格式化和解析之前,必须使用以上的符号创建SimpleDateFormat对象,来指定日期或者时间的格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
  • 下面是格式化和解析的代码
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");

//1.日期格式化:Date对象-->String
String str=sdf.format(new Date()); //把当前时间格式化为字符串

//2.日期解析:String --> Date对象
Date date=sdf.prase("1992年08月09日 16时24分18秒"); 
  • 练习:键盘录入一个生日(格式:yyyy-MM-dd),计算当前的年龄是多少?
//键盘录入字符串生日
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的生日(格式:yyyy-MM-dd):");
String birthday=sc.nextLine():

//把生日的字符串,转换为Date
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date1=sdf.prase(birthday); //生日那天的Date对象
long time1=date1.getTime(); //生日那天的毫秒值

//获取当前时间的毫秒值
long time2=System.currentTimeMills(); //当前时间的毫秒值

//计算时间差
long age=(time2-time1)/1000/60/60/24/365;
System.out.println("年龄为:"+age);

JDK8新增的日期类

LocalDateTime获取对象

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

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

LocalDateTime的获取方法

public int getYear()
    获取年
public int getMonthValue()
    获取月
public int getDayOfMonth()
    获取月中的天
public int getDayOfYear()
    获取年中的天
public DayOfWeek getDayOfWeek()
    获取星期中的第几天
public int getHour()
    获取小时
public int getMinute()
    获取分钟
public int getSecond()
    获取秒

LocalDateTime的转换方法

三者的区别
	LocalDateTime: 包含年、月、日、时、分、秒
	LocalDate: 包含年、月、日
	LocalTime:  包含时、分、秒
	
可以通过LocalDateTime转换为LocalDate和LocalTime
	public LocalDate toLocalDate()
        把LocalDateTime转换为LocalDate
    public LocalTime toLocalTime()
        把LocalDateTime转换为LocalTime

LocalDateTime的格式化和解析

public String format(DateTimeFormatter formatter)  
    格式化:把LocalDateTime转换为String
static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)  
    解析:把字符串转换为LocalDateTime对象
  • 日期格式化代码演示
//获取当前时间的LocalDateTime对象
LocalDateTime localDateTime = LocalDateTime.now();

//创建日期格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

//格式化
String str=localDateTime.format(formatter);
System.out.println(str);
  • 日期解析的代码演示
//创建日期格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

//日期解析
LocalDateTime localDateTime= LocalDateTime.parse("2020-08-23 15:19:39",formatter);

//...后面就可以使用LocalDateTime的方法,对时间进行操作

LocalDateTime加减运算方法

public LocalDateTime plusYears(int n)
    加、减年
public LocalDateTime plusMonths(int n)
	加、减月
public LocalDateTime plusDays(int n)
	加、减日
public LocalDateTime plusHours(int n)
	加、减时
public LocalDateTime plusMinutes(int n)
	加、减分
public LocalDateTime plusSeconds(int n)
	加、减秒

LocalDateTime设置时间的方法

public LocalDateTime withYear(int n)
    设置年
public LocalDateTime withMonth(int n)
    设置月
public LocalDateTime withDay(int n)
    设置日
public LocalDateTime withHour(int n)
    设置时
public LocalDateTime withMinute(int n)
    设置分
public LocalDateTime withSecond(int n)
    设置秒

时间间隔类

Period类

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

//生日的时间
LocalDate localDate1 = LocalDate.of(1996, 6, 23);
//今天的时间
LocalDate localDate2 = LocalDate.now();

//获取时间间隔对象
Period period = Period.between(localDate1,localDate2);

//获取相隔的年
int years = period.getYears();
System.out.println(years);

...

Duration类

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

//生日的时间
LocalDateTime localDate1 = LocalDateTime.of(1996, 6, 23,13,34,22);
//今天的时间
LocalDateTime localDate2 = LocalDateTime.of(1996, 7, 13,06,34,11);

//获取时间间隔对象
Duration duration = Duration.between(localDate1,localDate2);

//获取相隔的小时
long years = duration.toHours();
//获取相隔的分钟
long minutes = duration.toMinutes();
//获取相隔的秒
long seconds = duration.toSeconds();
//相隔的毫秒
long millis = duration.toMillis();

异常

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

异常类的继承体系

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

异常的处理

  • 虚拟机自己处理
直接停止程序运行,然后把异常信息打印在控制台
  • try…catch手动处理
try{
    //检查代码中是否有异常
}catch(异常类 e){
    //如果try中有异常,就会被catch捕获到
}

好处:处理之后的代码还可以继续执行
  • throws 声明异常

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

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

Throwable的方法

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

throw 产生一个异常

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

public static void main(String[] args) {
    sale(7);
}

public static void sale(int money){
    if(money==5||money==10){
        System.out.println("钱是真的,可以正常买东西");
    }else{
        throw new RuntimeException("钱是假的,我报警了,等着!!!");
    }
}

自定义异常

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

自定义异常类的步骤:
	1.写一个类继承Exception或者RuntimeException
	2.自动生成两个构造方法
	
注意:自定义异常,名称一定要见名知意(最好是能够使用异常类的名称,来说明问题)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.编写MyDate.java 2.该有如下构造方法 2.1 无参数构造方法public MyDate(),以当前的系统时间构造MyDate对象 2.2 public MyDate(int year, int month, int day), 以指定的年月日构造MyDate对象 3.该有如下属性 3.1 private int year ;//年 3.2 private int month; //月 3.3 private int day; //日 4.该有如下方法 4.1 public String after(int day); //返回当前对象代表的日期之后day天的日期,比如当前对象是2008-8-8,调用after(5)以后,应该返回2008-8-13,格式可自定义 4.2 public String before(int day); //返回当前对象代表的日期之前day天的日期,比如当前对象是2008-8-8,调用before(5)以后,应该返回2008-8-3,格式可自定义 4.3 public void setYear(int year); //设置年为指定值year 4.4 public void setMonth(int month); //设置月为指定值month 4.5 public void setDay(int day); //设置日为指定值day 4.6 public int getYear(); //返回当前对象的年 4.7 public int getMonth(); //返回当前对象的月 4.8 public int getDay(); //返回当前对象的日 4.9 public void set (int year, int month, int day); //设置年、月、日为指定的值year、month、day 4.10 public String toString();//以字符串形式返回当前对象的年月日,例如2008年08月08日,格式可自定义 4.11 public boolean equals(MyDate mydate);//当前对象与另一个对象比较,如果两个对象的年月日均相等,则返回true,反之返回false 5.编写TestMyDate.java,在main方法中对MyDate的各个方法进行测试 6.按照编程规范为MyDate.java编写规范的代码 7.按照java doc API的要求,对代码编写规范的注释,然后利用javadoc.exe命令生成MyDate.java的API doc 8.撰写上机报告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值