一、Data类(时间对象)


用法:
public class Test1Date { public static void main(String[] args) { // 目标:掌握Date日期类的使用。 // 1、创建一个Date的对象:代表系统当前时间信息的。 Date d = new Date(); System.out.println(d); // 2、拿到时间毫秒值。 long time = d.getTime(); System.out.println(time); // 3、把时间毫秒值转换成日期对象: 2s之后的时间是多少。 time += 2 * 1000; Date d2 = new Date(time); System.out.println(d2); // 4、直接把日期对象的时间通过setTime方法进行修改 Date d3 = new Date(); d3.setTime(time); //time += 2 * 1000;这里的time System.out.println(d3); } }
、、结果如下
二、SimpleDateFormat类(日期格式化)
用来格式化时间
用法:


public class Test2SimpleDateFormat { public static void main(String[] args) throws ParseException { // 目标:掌握SimpleDateFormat的使用。 // 1、准备一些时间 //准备日期对象 Date d = new Date(); System.out.println(d); //准备时间毫秒值 long time = d.getTime(); System.out.println(time); // 2、格式化日期对象,和时间 毫秒值。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a"); //SimpleDateFormat sdf = new SimpleDateFormat("时间格式"); String rs = sdf.format(d); //格式化日期对象 String rs2 = sdf.format(time);//格式化时间毫秒值 System.out.println(rs); System.out.println(rs2); System.out.println("----------------------------------------------"); // 目标:掌握SimpleDateFormat解析字符串时间 成为日期对象。 String dateStr = "2022-12-12 12:12:11"; // 1、创建简单日期格式化对象 , 指定的时间格式必须与被解析的时间格式一模一样,否则程序会出bug. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d2 = sdf2.parse(dateStr); System.out.println(d2); } }
案例:
public class kk {
public static void main(String[] args) throws ParseException {
// 目标:完成秒杀案例。
// 1、把开始时间、结束时间、小贾下单时间、小皮下单时间拿到程序中来。
String start = "2023年11月11日 0:0:0";
String end = "2023年11月11日 0:10:0";
String xj = "2023年11月11日 0:01:18";
String xp = "2023年11月11日 0:10:57";
// 2、把字符串的时间解析成日期对象。
SimpleDateFormat f = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date startDt = f.parse(start);
Date endDt = f.parse(end);
Date xjDt = f.parse(xj);
Date xpDt = f.parse(xp);
// 3、开始判断小皮和小贾是否秒杀成功了。
// 把日期对象转换成时间毫秒值来判断
long startTime = startDt.getTime();
long endTime = endDt.getTime();
long xjTime = xjDt.getTime();
long xpTime = xpDt.getTime();
if (xjTime >= startTime && xjTime <= endTime) {
System.out.println("小贾秒杀成功");
} else {
System.out.println("小贾秒杀失败");
}
if(xpTime >= startTime && xpTime <= endTime) {
System.out.println("小皮秒杀成功");
}
else{
System.out.println("小皮秒杀失败");
}
}
}
三、Calendar类(日历)
代表系统此刻时间对应的日历,通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
public class Test4Calendar { public static void main(String[] args) { // 目标:掌握Calendar的使用和特点。 // 1、得到系统此刻时间对应的日历对象。 Calendar now = Calendar.getInstance(); 、、他是个抽象类,但是有提供静态方法创建对象,所以直接调用方法 System.out.println(now); // 2、获取日历中的某个信息 int year = now.get(Calendar.YEAR); System.out.println(year); int days = now.get(Calendar.DAY_OF_YEAR); System.out.println(days); // 3、拿到日历中记录的日期对象。 Date d = now.getTime(); System.out.println(d); // 4、拿到时间毫秒值 long time = now.getTimeInMillis(); System.out.println(time); // 5、修改日历中的某个信息 now.set(Calendar.MONTH, 9); // 修改月份成为10月份。 now.set(Calendar.DAY_OF_YEAR, 125); // 修改成一年中的第125天。 System.out.println(now); // 6、为某个信息增加或者减少多少 now.add(Calendar.DAY_OF_YEAR, 100); now.add(Calendar.DAY_OF_YEAR, -10); now.add(Calendar.DAY_OF_MONTH, 6); now.add(Calendar.HOUR, 12); now.set(2026, 11, 22); System.out.println(now); } }
JDK8要新增日期类
一、代替Calendar(日历)
1.1、LocalDate、LocalTime、LocalDateTime用法:
大同小异
LocalDate类的基本使用
public class Test1_LocalDate {
public static void main(String[] args) {
// 0、获取本地日期对象(不可变对象)
LocalDate ld = LocalDate.now(); // 年 月 日
System.out.println(ld);
// 1、获取日期对象中的信息
int year = ld.getYear(); // 年
int month = ld.getMonthValue(); // 月(1-12)
int day = ld.getDayOfMonth(); // 日
int dayOfYear = ld.getDayOfYear(); // 一年中的第几天
int dayOfWeek = ld.getDayOfWeek().getValue(); // 星期几
System.out.println(year);
System.out.println(day);
System.out.println(dayOfWeek);
// 2、直接修改某个信息: withYear、withMonth、withDayOfMonth、withDayOfYear
LocalDate ld2 = ld.withYear(2099);
LocalDate ld3 = ld.withMonth(12);
System.out.println(ld2);
System.out.println(ld3);
System.out.println(ld);
// 3、把某个信息加多少: plusYears、plusMonths、plusDays、plusWeeks
LocalDate ld4 = ld.plusYears(2);
LocalDate ld5 = ld.plusMonths(2);
// 4、把某个信息减多少:minusYears、minusMonths、minusDays、minusWeeks
LocalDate ld6 = ld.minusYears(2);
LocalDate ld7 = ld.minusMonths(2);
// 5、获取指定日期的LocalDate对象: public static LocalDate of(int year, int month, int
dayOfMonth)
LocalDate ld8 = LocalDate.of(2099, 12, 12);
LocalDate ld9 = LocalDate.of(2099, 12, 12);
// 6、判断2个日期对象,是否相等,在前还是在后: equals isBefore isAfter
System.out.println(ld8.equals(ld9));// true
System.out.println(ld8.isAfter(ld)); // true
System.out.println(ld8.isBefore(ld)); // false
}
}
LocalTime类的基本使用
public class Test2_LocalTime {
public static void main(String[] args) {
// 0、获取本地时间对象
LocalTime lt = LocalTime.now(); // 时 分 秒 纳秒 不可变的
System.out.println(lt);
// 1、获取时间中的信息
int hour = lt.getHour(); //时
int minute = lt.getMinute(); //分
int second = lt.getSecond(); //秒
int nano = lt.getNano(); //纳秒
// 2、修改时间:withHour、withMinute、withSecond、withNano
LocalTime lt3 = lt.withHour(10);
LocalTime lt4 = lt.withMinute(10);
LocalTime lt5 = lt.withSecond(10);
LocalTime lt6 = lt.withNano(10);
// 3、加多少:plusHours、plusMinutes、plusSeconds、plusNanos
LocalTime lt7 = lt.plusHours(10);
LocalTime lt8 = lt.plusMinutes(10);
LocalTime lt9 = lt.plusSeconds(10);
LocalTime lt10 = lt.plusNanos(10);
// 4、减多少:minusHours、minusMinutes、minusSeconds、minusNanos
LocalTime lt11 = lt.minusHours(10);
LocalTime lt12 = lt.minusMinutes(10);
LocalTime lt13 = lt.minusSeconds(10);
LocalTime lt14 = lt.minusNanos(10);
// 5、获取指定时间的LocalTime对象:
// public static LocalTime of(int hour, int minute, int second)
LocalTime lt15 = LocalTime.of(12, 12, 12);
LocalTime lt16 = LocalTime.of(12, 12, 12);
// 6、判断2个时间对象,是否相等,在前还是在后: equals isBefore isAfter
System.out.println(lt15.equals(lt16)); // true
System.out.println(lt15.isAfter(lt)); // false
System.out.println(lt15.isBefore(lt)); // true
}
}
LocalDateTime类的基本使用
public class Test3_LocalDateTime {
public static void main(String[] args) {
// 0、获取本地日期和时间对象。
LocalDateTime ldt = LocalDateTime.now(); // 年 月 日 时 分 秒 纳秒
System.out.println(ldt);
// 1、可以获取日期和时间的全部信息
int year = ldt.getYear(); // 年
int month = ldt.getMonthValue(); // 月
int day = ldt.getDayOfMonth(); // 日
int dayOfYear = ldt.getDayOfYear(); // 一年中的第几天
int dayOfWeek = ldt.getDayOfWeek().getValue(); // 获取是周几
int hour = ldt.getHour(); //时
int minute = ldt.getMinute(); //分
int second = ldt.getSecond(); //秒
int nano = ldt.getNano(); //纳秒
// 2、修改时间信息:
// withYear withMonth withDayOfMonth withDayOfYear withHour
// withMinute withSecond withNano
LocalDateTime ldt2 = ldt.withYear(2029);
LocalDateTime ldt3 = ldt.withMinute(59);
// 3、加多少:
// plusYears plusMonths plusDays plusWeeks plusHours plusMinutes plusSeconds
plusNanos
LocalDateTime ldt4 = ldt.plusYears(2);
LocalDateTime ldt5 = ldt.plusMinutes(3);
// 4、减多少:
// minusDays minusYears minusMonths minusWeeks minusHours minusMinutes minusSeconds
minusNanos
LocalDateTime ldt6 = ldt.minusYears(2);
LocalDateTime ldt7 = ldt.minusMinutes(3);
// 5、获取指定日期和时间的LocalDateTime对象:
// public static LocalDateTime of(int year, Month month, int dayOfMonth, int hour,
// int minute, int second, int nanoOfSecond)
LocalDateTime ldt8 = LocalDateTime.of(2029, 12, 12, 12, 12, 12, 1222);
LocalDateTime ldt9 = LocalDateTime.of(2029, 12, 12, 12, 12, 12, 1222);
// 6、 判断2个日期、时间对象,是否相等,在前还是在后: equals、isBefore、isAfter
System.out.println(ldt9.equals(ldt8));
System.out.println(ldt9.isAfter(ldt));
System.out.println(ldt9.isBefore(ldt));
// 7、可以把LocalDateTime转换成LocalDate和LocalTime
// public LocalDate toLocalDate()
// public LocalTime toLocalTime()
// public static LocalDateTime of(LocalDate date, LocalTime time)
LocalDate ld = ldt.toLocalDate();
LocalTime lt = ldt.toLocalTime();
LocalDateTime ldt10 = LocalDateTime.of(ld, lt);
}
}
时区:
1.2、ZoneId类(获取时区id)
ZoneId:用于获取时区id,用于后续获得某时区的时间
用法
1.获取系统默认时区:
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.getId());或System.out.println(zoneId); 两种写法都可以获取时区id
2.获取全部时区id:
System.out.println(ZoneId.getAvailableZoneIds()); 返回全世界各地的时区id
3.把某个时区id封装成ZoneId对象:
ZoneId zoneId1 = ZoneId.of("America/New_York");
1.3、ZonedDateTime类(获取带时区id的时间)
获取某个时区的ZonedDateTime对象。参数用zoneid对象
ZonedDateTime now = ZonedDateTime.now(zoneId1);
System.out.println(now);
世界标准时间
ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
System.out.println(now1);
获取系统默认时区的ZonedDateTime对象
ZonedDateTime now2 = ZonedDateTime.now();
System.out.println(now2);
其余与localdatetime用法一样
public class Test4_ZoneId_ZonedDateTime { public static void main(String[] args) { // 目标:了解时区和带时区的时间。 // 1、ZoneId的常见方法: // public static ZoneId systemDefault(): 获取系统默认的时区 ZoneId zoneId = ZoneId.systemDefault(); System.out.println(zoneId.getId()); System.out.println(zoneId); // public static Set<String> getAvailableZoneIds(): 获取Java支持的全部时区Id System.out.println(ZoneId.getAvailableZoneIds()); // public static ZoneId of(String zoneId) : 把某个时区id封装成ZoneId对象。 ZoneId zoneId1 = ZoneId.of("America/New_York"); //---------------- // 2、ZonedDateTime:带时区的时间。 // public static ZonedDateTime now(ZoneId zone): 获取某个时区的ZonedDateTime对象。 ZonedDateTime now = ZonedDateTime.now(zoneId1); System.out.println(now); // 世界标准时间了 ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC()); System.out.println(now1); // public static ZonedDateTime now():获取系统默认时区的ZonedDateTime对象 ZonedDateTime now2 = ZonedDateTime.now(); System.out.println(now2); // Calendar instance = Calendar.getInstance(TimeZone.getTimeZone(zoneId1)); } }
1.4、Instance类
public class Test5_Instant { public static void main(String[] args) { // 1、创建Instant的对象,获取此刻时间信息 Instant now = Instant.now(); // 不可变对象 // 2、获取总秒数 long second = now.getEpochSecond(); System.out.println(second); // 3、不够1秒的纳秒数 int nano = now.getNano(); System.out.println(nano); System.out.println(now); Instant instant = now.plusNanos(111); // Instant对象的作用:做代码的性能分析,或者记录用户的操作时间点 Instant now1 = Instant.now(); // 代码执行。。。。 Instant now2 = Instant.now(); LocalDateTime l = LocalDateTime.now(); } }
二、代替SimpleDateFormat类
2.1、DateTimeFormatter类
public class Test6_DateTimeFormatter { public static void main(String[] args) { // 1、创建一个日期时间格式化器对象出来。 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); // 2、对时间进行格式化 LocalDateTime now = LocalDateTime.now(); System.out.println(now); String rs = formatter.format(now); // 正向格式化 System.out.println(rs); // 3、格式化时间,其实还有一种方案。 String rs2 = now.format(formatter); // 反向格式化 System.out.println(rs2); // 4、解析时间:解析时间一般使用LocalDateTime提供的解析方法来解析。 String dateStr = "2029年12月12日 12:12:11"; LocalDateTime ldt = LocalDateTime.parse(dateStr, formatter); System.out.println(ldt); } }
三、其他
3.1、Period类(计算日期间隔(年、月、日))
public class Test7_Period { public static void main(String[] args) { LocalDate start = LocalDate.of(2029, 8, 10); LocalDate end = LocalDate.of(2029, 12, 15); // 1、创建Period对象,封装两个日期对象。 Period period = Period.between(start, end); // 2、通过period对象获取两个日期对象相差的信息。 System.out.println(period.getYears()); System.out.println(period.getMonths()); System.out.println(period.getDays()); } }
3.2、Duration类(计算时间间隔(时、分、秒、纳秒))
public class Test8_Duration { public static void main(String[] args) { LocalDateTime start = LocalDateTime.of(2025, 11, 11, 11, 10, 10); LocalDateTime end = LocalDateTime.of(2025, 11, 11, 11, 11, 11); // 1、得到Duration对象 Duration duration = Duration.between(start, end); // 2、获取两个时间对象间隔的信息 System.out.println(duration.toDays());// 间隔多少天 System.out.println(duration.toHours());// 间隔多少小时 System.out.println(duration.toMinutes());// 间隔多少分 System.out.println(duration.toSeconds());// 间隔多少秒 System.out.println(duration.toMillis());// 间隔多少毫秒 System.out.println(duration.toNanos());// 间隔多少纳秒 } }