Date 日期的使用

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值