目录
6)、SimpleDateFormat解析字符串时间成为日期对象
1、概述、LocalTime /LocalDate / LocalDateTime
2)、LocalDate、LocalTime、LocalDateTime
4)、LocalDate、LocalTime、LocalDateTime获取信息的API。
一、日期与时间
1、Date
1)、Date 类概述
Date类代表当前所在系统的日期时间信息。
2)、Date的构造器
名称 |
说明 |
public Date() |
创建一个Date对象,代表的是系统当前此刻日期时间。 |
3)、Date的常用方法
名称 |
说明 |
public long getTime() |
返回从1970年1月1日 00:00:00走到此刻的总的毫秒数 |
4)、案例
4.1、需求
有一个时间2021年08月06日 11时11分11秒 往后2天14小时49分 06秒后的时间是多少?
4.1、代码
public static void main(String[] args) throws ParseException {
//1、把字符串时间拿到程序中去
String s = "2021年08月06日 11时11分11秒";
//2、把字符串时间解析成时期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date d = sdf.parse(s);
//3、往后走2天14小时49分06秒
long time = d.getTime() + (2L*24*60*60 + 14*60*60 + 49*60 + 6)*1000;
//4、格式化这个时间毫秒值就是结果
System.out.println(sdf.format(time));
}
4.2、结果
5)、时间毫秒值 -> 日期对象
构造器:
构造器 |
说明 |
public Date(long time) |
把时间毫秒值转换成Date日期对象。 |
方法:
Date方法 |
说明 |
public void setTime(long time) |
设置日期对象的时间为当前时间毫秒值对应的时间 |
2、SimpleDateFormat
1)、概念
代表简单日期格式化,可以用来把日期时间格式化成为我们想要的形式
2)、构造器
构造器 |
说明 |
public SimpleDateFormat(String pattern) |
创建简单日期格式化对象,并封装格式化的形式信息 |
3)、格式化方法
格式化方法 |
说明 |
public final String format(Date date) |
将日期格式化成日期/时间字符串 |
public final String format(Object time) |
将时间毫秒值式化成日期/时间字符串 |
4)、格式化的时间形式的常用的模式
5)、将字符串时间转化为日期对象。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
6)、SimpleDateFormat解析字符串时间成为日期对象
解析方法 |
说明 |
public Date parse(String source) |
从给定字符串的开始解析文本以生成日期 |
7)、案例
7.1、需求
某购物网站举办秒杀活动,开始时间和结束时间如上图所示,当前活动结束后,系统记录到2位用户的付款时间分别如下:
小贾下单并付款的时间为:2020年11月11日 0:03:47
小皮下单并付款的时间为:2020年11月11日 0:10:11
规则:顾客的付款时间必须在秒杀时间之内,请判断出两位顾客是否秒杀成功。
7.2、分析
把4个字符串形式的时间解析成日期对象。
判断小贾和小皮的时间是否在秒杀时间范围之内,并给出相应的提示。
7.3、代码
public static void main(String[] args) throws ParseException {
//1、开始和结束的时间
String startTime = "2021-11-11 00:00:00";
String endTime = "2021-11-11 00:10:00";
//2、小皮和小贾的下单时间
String xiaoPi = "2021-11-11 00:03:47";
String xiaoJia = "2021-11-11 00:10:11";
//3、解析他们的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = sdf.parse(startTime);
Date d2 = sdf.parse(endTime);
Date d3 = sdf.parse(xiaoPi);
Date d4 = sdf.parse(xiaoJia);
//判断他们是否下单成功
if(d3.after(d1) && d3.before(d2)){
System.out.println("小皮下单成功,正在发货!");
}else {
System.out.println("小皮没有下单成功!");
}
if(d4.after(d1) && d4.before(d2)){
System.out.println("小贾下单成功,正在发货!");
}else {
System.out.println("小贾没有下单成功!");
}
}
7.4、结果
3、Calendar
1)、Calendar概述
Calendar代表了系统此刻日期对应的日历对象。
Calendar是一个抽象类,不能直接创建对象。
2)、Calendar日历类创建日历对象的方法
方法名 |
说明 |
public static Calendar getInstance() |
获取当前日历对象 |
3)、Calendar常用方法
方法名 |
说明 |
public int get(int field) |
取日期中的某个字段信息。 |
public void set(int field,int value) |
修改日历的某个字段信息。 |
public void add(int field,int amount) |
为某个字段增加/减少指定的值 |
public final Date getTime() |
拿到此刻日期对象。 |
public long getTimeInMillis() |
拿到此刻时间毫秒值 |
注意:calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。
二、JDK8新增日期类
1、概述、LocalTime /LocalDate / LocalDateTime
1)、概述
从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。
其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。
2)、LocalDate、LocalTime、LocalDateTime
他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。
他们三者构建对象和API都是通用的。
3)、构建对象的方式
方法名 |
说明 |
|
public static Xxxx now(); |
静态方法,根据当前时间创建对象 |
LocaDate localDate = LocalDate.now(); LocalTime llocalTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); |
public static Xxxx of(…); |
静态方法,指定日期/时间创建对象 |
LocalDate localDate1 = LocalDate.of(2099 , 11,11); LocalTime localTime1 = LocalTime.of(11, 11, 11); LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43); |
4)、LocalDate、LocalTime、LocalDateTime获取信息的API。
方法名 |
说明 |
public int geYear() |
获取年 |
public int getMonthValue() |
获取月份(1-12) |
Public int getDayOfMonth() |
获取月中第几天乘法 |
Public int getDayOfYear() |
获取年中第几天 |
Public DayOfWeek getDayOfWeek() |
获取星期 |
5)、转换相关的API
方法名 |
说明 |
public LocalDate toLocalDate() |
转换成一个LocalDate对象 |
public LocalTime toLocalTime() |
转换成一个LocalTime对象 |
6)、修改相关的API
LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。
这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。
方法名 |
说明 |
plusDays, plusWeeks, plusMonths, plusYears |
向当前 LocalDate 对象添加几天、 几周、几个月、几年 |
minusDays, minusWeeks, minusMonths, minusYears |
从当前 LocalDate 对象减去几天、 几周、几个月、几年 |
withDayOfMonth, withDayOfYear, withMonth, withYear |
将月份天数、年份天数、月份、年 份 修 改 为 指 定 的 值 并 返 回 新 的 LocalDate 对象 |
isBefore, isAfter |
比较两个 LocalDate |
2、Instant
1)、概念
JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳。
2)、用法
3)、注意
时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。
Instant和Date这两个类可以进行转换。
3、DateTimeFormatter
1)、概念
在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。
正反都能调用format方法。
2)、用法
4、Duration
1)、概念
在Java8中,我们可以使用以下类来计算日期间隔差异:java.time.Period
主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。
用于 LocalDate 之间的比较。
2)、用法
5、Period
1)、概念
在Java8中,我们可以使用以下类来计算时间间隔差异:java.time.Duration
提供了使用基于时间的值测量时间量的方法。
用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。
2)、用法
6、ChronoUnit
1)、概念
ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位。