Date 日期的使用
一、引言
Java 8 引入了全新的日期和时间API,解决了之前版本中存在的一些问题,提供了更简洁、易用的方式处理日期和时间。新API包含了许多新的类和方法,使得日期和时间的操作更加直观和灵活。
二、核心类介绍
LocalDateTime:表示日期和时间,但不包含时区信息。LocalDate:仅表示日期,不包含时间和时区信息。LocalTime:仅表示时间,不包含日期和时区信息。ZonedDateTime:表示日期、时间和时区,适用于跨时区操作。Period:表示日期间隔,通常用于计算两个日期之间的差异。Duration:表示时间间隔,用于计算两个时间点之间的时长。
三、常用操作
Date类
//创建日期对象
Date date = new Date();
//定制日期格式
SimpleDateFormat formater = new SimpleDateFormat("yyyy- MM-dd HH:mm:ss");
String now = formater.format(date);
System.out.println(now); //打印现在时间
Calendar类
set方法:允许人们设置Calendar对象的年、月、日、时、分、秒等信息。
get方法:用于检索特定的日历字段值,例如年、月、日等。
setTime方法:允许将Date对象的时间设置为Calendar对象的当前时间。
getTime方法:返回表示Calendar对象当前时间的Date对象。
add方法:用于向指定的日历字段添加或减去指定的时间量,例如天数或小时数。
getTimeInMillis方法:返回Calendar对象表示的时间值,以毫秒为单位。
// 创建一个Calendar实例
Calendar calendar = Calendar.getInstance();
// 获取当前年份、月份和日期
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始,所以 需要加1
int day = calendar.get(Calendar.DAY_OF_MONTH);
// 设置日历的某个字段值
calendar.set(Calendar.YEAR, 2023);
calendar.set(Calendar.MONTH, Calendar.JANUARY); // 月份从0开始,所 以使用Calendar.JANUARY表示一月
calendar.set(Calendar.DAY_OF_MONTH, 1);
System.out.println("设置后的日期: " + calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH) + 1) + "月" + calendar.get(Calendar.DAY_OF_MONTH) + "日");
}//get获取日期时间
// 设置时间
calendar.setTime(new Date());
// 获取当前时间
Date currentDate = calendar.getTime();
System.out.println("Current date: " + currentDate);
// 添加时间量
calendar.add(Calendar.DAY_OF_MONTH, 5); // 增加5天
calendar.add(Calendar.HOUR_OF_DAY, -3); // 减少3小时
// 获取修改后的时间
Date modifiedDate = calendar.getTime();
System.out.println("Modified date: " + modifiedDate);
// 获取毫秒值
long millis = calendar.getTimeInMillis();
System.out.println("Milliseconds since January 1, 1970, 00:00:00 GMT: " + millis);
//输出结果
Current date: Mon Sep 02 16:05:58 CST 2024 //mon星期一
Modified date: Sat Sep 07 13:05:58 CST 2024 //sat 星期六
获取当前日期和时间
// 获取当前日期
LocalDate currentDate = LocalDate.now();
System.out.println("当前日期: " + currentDate);
// 获取当前时间
LocalTime currentTime = LocalTime.now();
System.out.println("当前时间: " + currentTime);
// 获取当前日期和时间
LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("当前日期和时间: " + currentDateTime);
格式化日期和时间
// 创建一个DateTimeFormatter对象,指定日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化当前日期时间
String formattedDateTime = currentDateTime.format(formatter);
System.out.println("格式化后的日期和时间: " + formattedDateTime);
// 使用预定义的格式
String isoDateTime = currentDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println("ISO格式的日期和时间: " + isoDateTime);
日期时间计算
// 日期加减
LocalDate futureDate = currentDate.plusDays(5);
LocalDate pastDate = currentDate.minusMonths(1);
System.out.println("未来5天后的日期: " + futureDate);
System.out.println("1个月前的日期: " + pastDate);
// 时间加减
LocalTime timePlusHours = currentTime.plusHours(2);
LocalTime timeMinusMinutes = currentTime.minusMinutes(30);
System.out.println("2小时后的时间: " + timePlusHours);
System.out.println("30分钟前的时间: " + timeMinusMinutes);
// 计算日期间隔
Period period = Period.between(LocalDate.of(2023, 1, 1), LocalDate.of(2023, 12, 31));
System.out.println("年份差异: " + period.getYears());
System.out.println("月份差异: " + period.getMonths());
System.out.println("天数差异: " + period.getDays());
时区操作
// 获取带时区的日期时间
ZonedDateTime zonedDateTime = currentDateTime.atZone(ZoneId.systemDefault());
System.out.println("带时区的日期和时间: " + zonedDateTime);
// 转换时区
ZonedDateTime zonedDateTimeUTC = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println("UTC时区的日期和时间: " + zonedDateTimeUTC);
转换到其他日期时间类型
// 转换为Date类型(如果需要与旧代码兼容)
Date oldStyleDate = Date.from(currentDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println("转换为Date类型: " + oldStyleDate);
// 转换为字符串与Date的相互转换(例如,从数据库读取或写入)
String dateString = oldStyleDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println("日期时间字符串: " + dateString);