关于java里面的时间

这篇博客探讨了Java中LocalDateTime的时间处理,包括如何转换为字符串、求整点时间、按小时分组和在数据库(如PostgreSQL)中的操作。还介绍了测试时间接口、获取年份起止日期、字符串与日期类型之间的转换、日期集合生成以及时间差计算等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LocalDateTIme

获取当前时间后一年的时间戳

LocalDateTime.now().plusYears(1).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()

获取当前时间的格式化时间

LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")

时间戳转换时间点

//时区加8
LocalDateTime.ofEpochSecond(this.timestamp, 0, ZoneOffset.ofHours(8));

postgre SQL数据库

时间戳转换为时间

//时间格式
to_timestamp(time)
//字符串格式
to_char(to_timestamp(time),'yyyy-MM-dd HH24-MI-SS')

将LocalDateTime转为字符串

 public PollutantInstatValue getInstantValue(String district, LocalDateTime hour) {
        String hourString = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(hour);
        return mapper.getDistrictInstantValue(district, hourString);
    }

求某个时间点的整点

SELECT date_trunc('hour', timestamp) FROM air_sensor_recode;

在这里插入图片描述
不是四舍五入
在这里插入图片描述
同理 整数天的时间点也可也求出来

求按小时分组的最后一个时间点

SELECT date_trunc('hour', timestamp) AS hour, last(timestamp, timestamp) as "reportTime" FROM air_sensor_recode GROUP BY hour;

在java层面求某个时间的整点

LocalDateTime time = LocalDateTime.of(
                     reportTime.getYear(), 
                     reportTime.getMonth(),
                     reportTime.getDayOfMonth(), 
                     reportTime.getHour(), 
	                 0, 
	                 0);
//去整点
  private LocalDateTime toHourTime(LocalDateTime dateTime) {
        LocalDate date = dateTime.toLocalDate();
        int hour = dateTime.getHour();
        return LocalDateTime.of(date, LocalTime.of(hour, 0));
    }

测试时间接口

GET http://localhost:8080/api/aqi/instant/district?time=2019-07-30T14%3A00%3A00```

求今年的起始日期和结束日期

LocalDate end = LocalDate.now().with(TemporalAdjusters.lastDayOfYear());
LocalDate start = LocalDate.now().with(TemporalAdjusters.firstDayOfYear());
//转成日期数组
 List<LocalDate> dates = Stream.iterate(start, date -> date.plusDays(1))
                    .limit(ChronoUnit.DAYS.between(start, end))
                    .collect(Collectors.toList());

字符串转LocalDate

 LocalDate beginDate = LocalDate.parse(fromDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    LocalDate endDate = LocalDate.parse(toDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
     runner.run(()-> {
         List<LocalDate> dates = Stream.iterate(beginDate, date -> date.plusDays(1))
                 .limit(ChronoUnit.DAYS.between(beginDate, endDate))
                 .collect(Collectors.toList());
         for (LocalDate date : dates) {
             for (int hour = 0;hour < 24; hour++) {
                 LocalDateTime now = LocalDateTime.of(date, LocalTime.of(hour, 0));
                 controller.persistReading(now);
             }
         }
     });

字符串与LocalDateTIme互换

 public static void main(String[] args) {
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime time = LocalDateTime.now();
         String localTime = df.format(time); // 2019-08-01 17:36:52
         LocalDateTime ldt = LocalDateTime.parse("2019-08-01 17:07:05",df);  //2019-08-01T17:07:05
         System.out.println("LocalDateTime转成String类型的时间:"+localTime);
         System.out.println("String类型的时间转成LocalDateTime:"+ldt);
     }

生成两个日期的集合

 LocalDate from = LocalDate.now().minusMonths(1);
 LocalDate to = LocalDate.now();
 List<LocalDate> dates = Stream.iterate(from, date -> date.plusDays(1))
                .limit(ChronoUnit.DAYS.between(from, to.plusDays(1)))
                .collect(Collectors.toList());

获取时间差

Duration duration = Duration.between(patrolTrace.getStartTime(),patrolTrace.getEndTime());
long second = duration.toMillis()/1000;

获取上个月最开始的时间

        LocalDateTime startTime =  LocalDateTime.of(LocalDateTime.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()).toLocalDate(), LocalTime.MIN);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值