文章目录
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);