目录
5.1.4 SimpleDateFormat的构造器及其格式化方法
5.2.3 LocalDate、LocalTime、LocalDateTime
5.2.4 LocalDate、LocalTime、LocalDateTime总结
5.2.8 Duration、Period、ChronoUnit
5. 面向对象高级 - 时间API
⭐ Java开发中几乎离不开时间类 (以京东购物为例)
订单记录
时间API
5.1 JDK8以前的时间API
5.1.1 Date 类
代表的是日期和时间
5.1.2 Date的构造器及其常见方法
Date的构造器及其常见方法使用实例如下:
// 需要使用JDK7 jdk7.date;
public class DateDemo1 {
public static void main(String[] args) {
// 将当前时间, 封装为Date日期对象
Date d1 = new Date();
System.out.println(d1);
// 把时间毫秒值转换成Date日期对象
Date d2 = new Date(1000L);
System.out.println(d2);
System.out.println(d1.getTime());
System.out.println(d2.getTime());
System.out.println("----------------------");
Date d3 = new Date();
d3.setTime(0L);
System.out.println(d3);
}
}
5.1.3 SimpleDateFormat 类
用于日期格式化
没有使用SimpleDateFormat的时间显示情况如下所示:
5.1.4 SimpleDateFormat的构造器及其格式化方法
// 注意使用的是JDK7中的 jdk7.format;
public class SimpleDateFormatDemo {
/*
SimpleDateFormat类 : 用于日期格式化
1. 构造方法 :
public SimpleDateFormat() : 创建一个日期格式化对象, 使用 [默认模式]
public SimpleDateFormat(String pattern) : 创建一个日期格式化对象, [手动指定模式]
2. 常用方法 :
public final String format(Date date) : 将日期对象, 转换为字符串
public public final Date parse(String source) : 将日期字符串, 解析为日期对象
*/
public static void main(String[] args) throws ParseException {
String today = "2023年2月4日";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date date = simpleDateFormat.parse(today);
System.out.println(date);
}
private static void method() {
// 创建一个日期格式化对象, 使用 [默认模式]
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
// 创建一个日期格式化对象, [手动指定模式]
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
// 创建Date对象, 封装此刻的时间
Date date = new Date();
// 将日期对象, 转换为字符串
String result = simpleDateFormat.format(date);
System.out.println(result);
}
}
5.1.5 总结
5.1.6 Calendar 类
代表的是系统此刻时间对应的日历,通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
5.1.7 Calendar 类使用
创建对象 : Calendar是一个抽象类,不能直接创建对象
// 创建 多态 Calendar的对象
Calendar c = Calendar.getInstance();
5.1.8 Calendar 类常用方法
5.1.9 Calendar 总结
5.2 JDK8以后的时间API
5.2.1 JDK8前后时间API对比
5.2.2 JDK8四类时间API
5.2.3 LocalDate、LocalTime、LocalDateTime
(由于三者的逻辑大同小异,以下以LocalDateTime为例)
具体代码实现如下:
public class LocalDateTimeDemo {
public static void main(String[] args) {
// 日期 时间
LocalDateTime nowDateTime = LocalDateTime.now();
System.out.println("今天是:" + nowDateTime);
// 年
System.out.println(nowDateTime.getYear());
// 月
System.out.println(nowDateTime.getMonthValue());
// 日
System.out.println(nowDateTime.getDayOfMonth());
// 时
System.out.println(nowDateTime.getHour());
// 分
System.out.println(nowDateTime.getMinute());
// 秒
System.out.println(nowDateTime.getSecond());
// 纳秒
System.out.println(nowDateTime.getNano());
// 日 : 当年的第几天
System.out.println("dayOfYear:" + nowDateTime.getDayOfYear());
// 星期
System.out.println("星期" + nowDateTime.getDayOfWeek());
System.out.println("星期" + nowDateTime.getDayOfWeek().getValue());
// 月份
System.out.println("月份" + nowDateTime.getMonth());
System.out.println("月份" + nowDateTime.getMonth().getValue());
}
}
5.2.4 LocalDate、LocalTime、LocalDateTime总结
5.2.5 DateTimeFormatter 类
用于时间的格式化和解析
具体代码实现如下
public class DateTimeFormatterDemo {
/*
用于时间的格式化和解析:
1. 对象的获取 :
static DateTimeFormatter ofPattern(格式) : 获取格式对象
2. 格式化 :
String format(时间对象) : 按照指定方式格式化
3. 解析 :
LocalDateTime.parse("解析字符串", 格式化对象);
LocalDate.parse("解析字符串", 格式化对象);
LocalTime.parse("解析字符串", 格式化对象);
*/
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println("格式化之前:" + now);
// 获取格式化对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
// 格式化
String result = formatter.format(now);
System.out.println("格式化之后:" + result);
// 解析
String time = "2008年08月08日";
LocalDate parse = LocalDate.parse(time, formatter);
System.out.println(parse);
}
}
5.2.6 Instant 时间戳
用于表示时间的对象, 类似之前所学习的 Date
=public class InstantDemo {
/*
Instant类 : 用于表示时间的对象, 类似之前所学习的Date
*/
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println("当前的时间戳是:" + now);
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDateTime);
}
}
5.2.7 ZoneId 类
方法名 | 说明 |
static Set<String> getAvailableZoneIds() | 获取Java中支持的所有时区 |
static ZoneId systemDefault() | 获取系统默认时区 |
static ZoneId of(String zoneId) | 获取一个指定时区 |
5.2.8 Duration、Period、ChronoUnit
主要了解以下代码
/**
* ChronoUnit可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位
*/
public class ChronoUnitDemo {
public static void main(String[] args) {
// 本地日期时间对象:此刻的
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
// 生日时间
LocalDateTime birthDate = LocalDateTime.of(2023, 2, 4,
0, 0, 0);
System.out.println(birthDate);
System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));
System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));
}
}