JDK8使用java.time包简化开发者处理时间类型的数据常用方法

JDK8发布之前日期处理方式,如下

		//java8之前日期解决方案
		//SimpleDateFormat为线程不安全
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(sdf.format(new Date()));
		String dateStr = "2022-04-12 19:18:06";
		Date date;
		try {
			date = sdf.parse(dateStr);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//日历类
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		//日期计算 加5天
		calendar.add(Calendar.DAY_OF_MONTH, 5);
		System.out.println(calendar.getTime());

JDK8引入LocalDate,LocalTime,LocalDateTime,Instant弥补jdk之前处理日期类型能力缺陷

LocalDate常用方法:

System.out.println("-----------------LocalDate---------------------");
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate); //2022-04-12
		System.out.println(localDate.getYear()+" "+localDate.getMonthValue()+" "+localDate.getDayOfMonth());  //2022 4 12
		//指定生成一个LocalDate
		localDate = LocalDate.of(2024, 5, 6);
		System.out.println(localDate); //2024-05-06
		//日期计算 加5天 
		localDate = localDate.plus(5, ChronoUnit.DAYS); //注意localDate.plus()之后会生成一个新的对象
		System.out.println(localDate);//2024-05-11
		//日期转字符串
		System.out.println(localDate.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"))); // 2024/05/11
		//字符串转日期
		String dateStr1 = "2020-06-05";
		localDate = LocalDate.parse(dateStr1, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		System.out.println(localDate); //2020-06-05
		//日期比较
		LocalDate start = LocalDate.of(2020, 5, 6);
		LocalDate end = LocalDate.of(2020, 6, 6);
		System.out.println(start.compareTo(end));// -1
		System.out.println(end.compareTo(start));// 1
		//计算相差时间
		Period periodLocalDate = Period.between(start,end);
		System.out.println(periodLocalDate.getYears()); //0
		System.out.println(periodLocalDate.getMonths()); //1
		System.out.println(periodLocalDate.getDays());  //0
		//计算两个日期相隔多少天
		System.out.println(end.toEpochDay() - start.toEpochDay());  //31
		//LocalDate 转换为 Date 
		localDate = LocalDate.of(2024, 5, 6);
		//LocalDate 转 LocalDateTime 转 Instant 转 Date
		//localDate取系统默认时区转为Instant时间点
		Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
		System.out.println(instant);//2024-05-05T16:00:00Z 注意转后的Instant为UTC标准时间
		Date date2 = Date.from(instant);
		System.out.println(date2); //Mon May 06 00:00:00 CST 2024

LocalTime的使用:

		LocalTime localTime = LocalTime.now();
		System.out.println(localTime); //19:50:58.313
		//时间计算 加3小时30分
		localTime = localTime.plusHours(3).plusMinutes(30); 
		System.out.println(localTime); //23:20:58.313
		//时间比较
		LocalTime startLocalTime = LocalTime.of(5, 10, 30); //05:10:30
		LocalTime enLocalTime = LocalTime.of(13, 15, 15);  //13:15:15
		System.out.println(enLocalTime.compareTo(startLocalTime)); //1
		//Clock
		Clock clock = Clock.systemDefaultZone();
		System.out.println(clock.millis()); //1649764782752

LocalDateTime的使用:

		System.out.println("----------LocalDateTime-------------");
		Set<String> set = ZoneId.getAvailableZoneIds();
//		set.stream().sorted(String::compareToIgnoreCase).forEach(System.out::println);
		
		
		//设置为当前时间
		LocalDateTime nowTime = LocalDateTime.now();
		//设置为指定时间
		LocalDateTime localDateTime = LocalDateTime.of(2020, 1, 1, 10, 10, 30); //2020-01-01 10:10:30
		System.out.println(localDateTime); //2020-01-01T10:10:30
		//转字符串
		String localDateTimeStr = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
		System.out.println(localDateTimeStr); //2020-01-01 10:10:30
		//转为时区时间 设置上海时区
		ZoneId zonId = ZoneId.of("Asia/Shanghai");
		ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zonId);
		System.out.println(zonedDateTime);    //2020-01-01T10:10:30+08:00[Asia/Shanghai]
		System.out.println(zonedDateTime.toInstant());//2020-01-01T02:10:30Z
		//ZonedDateTime转Date
		Date dateTime = Date.from(zonedDateTime.toInstant());
		System.out.println(dateTime);//ed Jan 01 10:10:30 CST 2020

		//字符串转LocalDateTime
		String dateTimeStr = "2022-01-01 10:10:30";
		LocalDateTime localDateTime2 = LocalDateTime.parse(dateTimeStr,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
		System.out.println(localDateTime2); //2022-01-01T10:10:30

        //Date转LocalDateTime
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值