LocalDateTime 日期、时间、时间戳

日期时间类:LocalDateTime //年月日时分秒
日期类:LocalDate // 年月日
时间类:LocalTime // 时分秒
时间戳:Instant

数据库中日期格式化

字符串格式化为日期

	SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
	sf.parse("2000-1-1")

日期时间

    //当前时间
    LocalDateTime ldt = LocalDateTime.now();
    System.out.println(ldt);//2022-05-15T15:01:21.451937400
    // 按照给定的字符,格式化为时间对象
    LocalDateTime ldt2 = LocalDateTime.of(2016, 11, 11, 13, 25, 14);
    System.out.println(ldt2);//2016-11-11T13:25:14
    // 两年以后的当前日期
    LocalDateTime ldt3 = ldt.plusYears(2);
    System.out.println(ldt3);//2024-05-15T15:01:21.451937400
    // 两个月之前的当前时间
    LocalDateTime ldt4 = ldt.minusMonths(2);
    System.out.println(ldt4);//2022-03-15T15:01:21.451937400
    // 本月10日同一时间
    LocalDateTime ldt5 = ldt.withDayOfMonth(10);
    System.out.println(ldt5);//2022-05-10T14:51:46.390582100
    // 下周同一时间
    LocalDateTime ldt6 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
    System.out.println(ldt6);//2022-05-21T14:51:46.390582100

    // 自定义:下一个工作日
    LocalDate ld = LocalDate.now().with((l) -> {
        LocalDate ld1 = (LocalDate) l;

        DayOfWeek dow = ld1.getDayOfWeek();

        if (dow.equals(DayOfWeek.FRIDAY)) {
            return ld1.plusDays(3);
        } else if (dow.equals(DayOfWeek.SATURDAY)) {
            return ld1.plusDays(2);
        } else {
            return ld1.plusDays(1);
        }
        System.out.println("下一个工作日是:" + ld);
        // 从LocalDateTime对象中获取年、月、日、时、分、秒
        System.out.println(ldt.getYear());
        System.out.println(ldt.getMonthValue());
        System.out.println(ldt.getDayOfMonth());
        System.out.println(ldt.getHour());
        System.out.println(ldt.getMinute());
        System.out.println(ldt.getSecond());
    }

时间戳、时区、计算间隔时间

		// 默认使用 UTC 时区
		Instant it = Instant.now();
		System.out.println(it);//2022-05-15T06:49:43.758863500Z
		// 设置为东8区的时间
		OffsetDateTime odt = it.atOffset(ZoneOffset.ofHours(8));
		System.out.println(odt);//2022-05-15T14:49:43.758863500+08:00
		// 当前时间的时间戳
		System.out.println(it.toEpochMilli());//1652597383758
		// 通过时间戳的值计算日期
		Instant it2 = Instant.ofEpochSecond(1);
		System.out.println(it2);//1970-01-01T00:00:01Z

根据时间戳计算间隔时间

		Instant ins1 = Instant.now();
		try {
		    Thread.sleep(2000);
		} catch (InterruptedException e) {
		    e.printStackTrace();
		}
		Instant ins2 = Instant.now();
		Duration between = Duration.between(ins1, ins2);
		System.out.println(between.getSeconds());//间隔的秒数

使用时间计算时间间隔

    // 以当前时间计算间隔
    LocalTime lt1 = LocalTime.now();
    System.out.println("lt1 = " + lt1);
    try {
        Thread.sleep(6000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    LocalTime lt2 = LocalTime.now();

    System.out.println(Duration.between(lt1, lt2).toMillis());//间隔的毫秒数
}

DateTimeFormatter : 解析和格式化日期或时间

		    LocalDateTime ldt = LocalDateTime.now();//当前时间
		    // 格式化为 ISO_DATE 格式
		    DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
		    String str = ldt.format(dtf);//iso格式化
		    System.out.println(str);//2022-05-15
		
		    System.out.println("-----------自定义格式化格式------------");
		
		    DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
		    String newDate = dtf2.format(ldt);//自定义格式化格式
		    System.out.println(newDate);//2022年05月15日 14:55:19
		    System.out.println("--------------去格式化恢复最初的格式----------------");
		    LocalDateTime ldt2 = LocalDateTime.parse(newDate, dtf2);//解析为最初的格式
		    System.out.println(ldt2);//2022-05-15T14:55:19

ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期


        LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        System.out.println(ldt);//2022-05-15T15:00:01.859641600

        ZonedDateTime zone = ldt.atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(zone);//2022-05-15T15:00:01.859641600+08:00[Asia/Shanghai]

打印所有时区的名称

		    Set<String> zoneIds = ZoneId.getAvailableZoneIds();
		    zoneIds.forEach(System.out::println);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值