java的localdatetime和localdate时间处理
LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime minTime = localDateTime.with(LocalTime.MIN); LocalDateTime maxTime = localDateTime.with(LocalTime.MAX); Set<String> times = DateUtils.getTimes(Date.from(minTime.atZone(ZoneId.systemDefault()).toInstant()), Date.from(maxTime.atZone(ZoneId.systemDefault()).toInstant()));
package com.zygh.traffic.common.utils.date; import cn.hutool.core.date.LocalDateTimeUtil; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java.util.*; /** * 时间工具类 * * @author 芋道源码 */ public class DateUtils { /** * 时区 - 默认 */ public static final String TIME_ZONE_DEFAULT = "GMT+8"; /** * 秒转换成毫秒 */ public static final long SECOND_MILLIS = 1000; public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; public static final String FORMAT_HOUR_MINUTE_SECOND = "HH:mm:ss"; /** * 将 LocalDateTime 转换成 Date * * @param date LocalDateTime * @return LocalDateTime */ public static Date of(LocalDateTime date) { // 将此日期时间与时区相结合以创建 ZonedDateTime ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault()); // 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳 Instant instant = zonedDateTime.toInstant(); // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 return Date.from(instant); } /** * 将 Date 转换成 LocalDateTime * * @param date Date * @return LocalDateTime */ public static LocalDateTime of(Date date) { // 转为时间戳 Instant instant = date.toInstant(); // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); } @Deprecated public static Date addTime(Duration duration) { return new Date(System.currentTimeMillis() + duration.toMillis()); } public static boolean isExpired(Date time) { return System.currentTimeMillis() > time.getTime(); } public static boolean isExpired(LocalDateTime time) { LocalDateTime now = LocalDateTime.now(); return now.isAfter(time); } public static long diff(Date endTime, Date startTime) { return endTime.getTime() - startTime.getTime(); } /** * 创建指定时间 * * @param year 年 * @param mouth 月 * @param day 日 * @return 指定时间 */ public static Date buildTime(int year, int mouth, int day) { return buildTime(year, mouth, day, 0, 0, 0); } /** * 创建指定时间 * * @param year 年 * @param mouth 月 * @param day 日 * @param hour 小时 * @param minute 分钟 * @param second 秒 * @return 指定时间 */ public static Date buildTime(int year, int mouth, int day, int hour, int minute, int second) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, mouth - 1); calendar.set(Calendar.DAY_OF_MONTH, day); calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.SECOND, second); calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒 return calendar.getTime(); } public static Date max(Date a, Date b) { if (a == null) { return b; } if (b == null) { return a; } return a.compareTo(b) > 0 ? a : b; } public static LocalDateTime max(LocalDateTime a, LocalDateTime b) { if (a == null) { return b; } if (b == null) { return a; } return a.isAfter(b) ? a : b; } /** * 计算当期时间相差的日期 * * @param field 日历字段.<br/>eg:Calendar.MONTH,Calendar.DAY_OF_MONTH,<br/>Calendar.HOUR_OF_DAY等. * @param amount 相差的数值 * @return 计算后的日志 */ public static Date addDate(int field, int amount) { return addDate(null, field, amount); } /** * 计算当期时间相差的日期 * * @param date 设置时间 * @param field 日历字段 例如说,{@link Calendar#DAY_OF_MONTH} 等 * @param amount 相差的数值 * @return 计算后的日志 */ public static Date addDate(Date date, int field, int amount) { if (amount == 0) { return date; } Calendar c = Calendar.getInstance(); if (date != null) { c.setTime(date); } c.add(field, amount); return c.getTime(); } /** * 是否今天 * * @param date 日期 * @return 是否 */ public static boolean isToday(LocalDateTime date) { return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now()); } /** * 传入两个时间范围,返回这两个时间范围内的所有日期,并保存在一个集合中 * @param beginTime * @param endTime * @return * @throws ParseException */ public static List<String> findEveryDay(String beginTime, String endTime) throws ParseException { //1.创建一个放所有日期的集合 List<String> dates = new ArrayList(); //2.创建时间解析对象规定解析格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //3.将传入的时间解析成Date类型,相当于格式化 Date dBegin = sdf.parse(beginTime); Date dEnd = sdf.parse(endTime); //4.将格式化后的第一天添加进集合 dates.add(sdf.format(dBegin)); //5.使用本地的时区和区域获取日历 Calendar calBegin = Calendar.getInstance(); //6.传入起始时间将此日历设置为起始日历 calBegin.setTime(dBegin); //8.判断结束日期是否在起始日历的日期之后 while (dEnd.after(calBegin.getTime())) { // 9.根据日历的规则:月份中的每一天,为起始日历加一天 calBegin.add(Calendar.DAY_OF_MONTH, 1); //10.得到的每一天就添加进集合 dates.add(sdf.format(calBegin.getTime())); //11.如果当前的起始日历超过结束日期后,就结束循环 } return dates; } /** * 获取一段时间范围内所有时分时间,[01:00, 02:00, 03:00, ...] */ public static Set<String> getTimes(Date fromDate, Date toDate) { Set<String> times = new HashSet<>(); SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm"); List<Date> hourlyInterval = getHourlyInterval(fromDate, toDate); for (Date date : hourlyInterval) { times.add(dateFormat.format(date)); } return times; } private static List<Date> getHourlyInterval(Date fromDate, Date toDate) { Calendar calendar = Calendar.getInstance(); calendar.setTime(fromDate); List<Date> hourlyInterval = new ArrayList<>(); hourlyInterval.add(calendar.getTime()); while (calendar.getTime().before(toDate)) { calendar.add(Calendar.HOUR_OF_DAY, 1); hourlyInterval.add(calendar.getTime()); } return hourlyInterval; } }
* 获取每个月数据
* @param d1
* @param d2
* @return
*/
public static List<String> getMonth(Date d1, Date d2) {
List<String> result = new ArrayList<>();
Calendar dd = Calendar.getInstance();//定义日期实例
dd.setTime(d1);//设置日期起始时间
while (dd.getTime().before(d2)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String str = sdf.format(dd.getTime());
dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
result.add(str);
}
return result;
}
/ 获取今年第一天及最后一天
LocalDateTime firstDayOfYear = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear())), LocalTime.MIN);
LocalDateTime lastDayOfYear = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.lastDayOfYear())), LocalTime.MAX);
// 获取当前月第一天及最后一天
LocalDateTime firstDayOfMonth = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth())), LocalTime.MIN);
LocalDateTime lastDayOfMonth = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth())), LocalTime.MAX);
// 获取当天的起始时间
LocalDateTime firstTimeOfDay = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
LocalDateTime lastTimeOfDay = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
// 获取当天日期
LocalDate now = LocalDate.now();
// 当天开始时间
LocalDateTime todayStart = now.atStartOfDay();
// 当天结束时间
LocalDateTime todayEnd = LocalDateTime.of(now, LocalTime.MAX);
// 周一
LocalDate monday = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 周日
LocalDate sunday = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
// 本周开始时间
LocalDateTime weekStart = monday.atStartOfDay();
// 本周结束时间
LocalDateTime weekEnd = LocalDateTime.of(sunday, LocalTime.MAX);
// 本月1号
LocalDate firstDayOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
// 本月最后一天
LocalDate lastDayOfMonth = now.with(TemporalAdjusters.lastDayOfMonth());
// 本月1号的开始时间
LocalDateTime firstDayOfMonthStart = firstDayOfMonth.atStartOfDay();
// 本月最后一天的最后时间
LocalDateTime firstDayOfMonthEnd = LocalDateTime.of(lastDayOfMonth, LocalTime.MAX);
// 今年第一天
LocalDate beginTime = LocalDate.now().with(TemporalAdjusters.firstDayOfYear());
// 今年最后一天
LocalDate endTiime = LocalDate.now().with(TemporalAdjusters.lastDayOfYear());
//获取前一天日期
LocalDate yesterday2 = LocalDate.now().minusDays(1);
localdate和localdatetime的转换
LocalDate paymentDutDate = byId.getPaymentDutDate(); LocalDate minusDays = paymentDutDate.minusDays(nodeReminderSettingDTO.getRemindDay()); LocalDateTime localDateTime = minusDays.atTime(Integer.parseInt(nodeReminderSettingDTO.getRemindHour().split(":")[0]), Integer.parseInt(nodeReminderSettingDTO.getRemindHour().split(":")[1]), 59);
获取一天里面二十四小时
/** * 获取一段时间范围内所有时分时间,[01:00, 02:00, 03:00, ...] */ public static Set<String> getTimes(Date fromDate, Date toDate) { Set<String> times = new HashSet<>(); SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm"); List<Date> hourlyInterval = getHourlyInterval(fromDate, toDate); for (Date date : hourlyInterval) { times.add(dateFormat.format(date)); } return times; } private static List<Date> getHourlyInterval(Date fromDate, Date toDate) { Calendar calendar = Calendar.getInstance(); calendar.setTime(fromDate); List<Date> hourlyInterval = new ArrayList<>(); hourlyInterval.add(calendar.getTime()); while (calendar.getTime().before(toDate)) { calendar.add(Calendar.HOUR_OF_DAY, 1); hourlyInterval.add(calendar.getTime()); } return hourlyInterval; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?