java日期偏移量方法

编程入门 行业动态 更新时间:2024-10-07 20:33:42

java<a href=https://www.elefans.com/category/jswz/34/1771397.html style=日期偏移量方法"/>

java日期偏移量方法

日期偏移量

package 包名.路径;import cn.hutool.core.date.*;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;/*** @author 孙永潮* @date 2023/10/8*/
@Slf4j
public class LocalDateUtil extends LocalDateTimeUtil {/*** 获取当前日期 ~ 偏移量之间的日期范围** @param type 1:年 2:季 3:月 4:日 5:小时* @param num  偏移量* @return*/public static List<String> createDateScope(Integer type, Integer num) {return createDateScope(new Date(), type, num, null);}/*** 获取起始日期 ~ 偏移量之间的日期范围** @param now  起始日期* @param type 1:年 2:季 3:月 4:日 5:小时* @param num  偏移量* @return*/public static List<String> createDateScope(Date now, Integer type, Integer num) {return createDateScope(now, type, num, null);}/*** 获取起始日期 ~ 偏移量之间的日期范围** @param now    起始日期* @param type   1:年 2:季 3:月 4:日 5:小时* @param num    偏移量* @param format 自定义格式(季不支持)* @return*/public static List<String> createDateScope(Date now, Integer type, Integer num, String format) {List<String> list = new LinkedList<>();switch (type) {case 1:for (int i = num - 1; i >= 0; i--) {DateTime offset = DateUtil.offset(now, DateField.YEAR, -i);String date = DateUtil.format(offset, StrUtil.isNotBlank(format) ? format : DatePattern.NORM_YEAR_PATTERN);list.add(date);}return list;case 2:for (int i = num - 1; i >= 0; i--) {DateTime offset = DateUtil.offsetMonth(now, -i * 3);int quarter = DateUtil.quarter(offset);String date = DateUtil.format(offset, DatePattern.NORM_YEAR_PATTERN);list.add(date + "/" + quarter + "季度");}break;case 3:for (int i = num - 1; i >= 0; i--) {DateTime offset = DateUtil.offsetMonth(now, -i);String date = DateUtil.format(offset, StrUtil.isNotBlank(format) ? format : "yyyy/MM");list.add(date);}break;case 4:for (int i = num - 1; i >= 0; i--) {DateTime offset = DateUtil.offsetDay(now, -i);String date = DateUtil.format(offset, StrUtil.isNotBlank(format) ? format : "MM/dd");list.add(date);}break;case 5:for (int i = num - 1; i >= 0; i--) {DateTime offset = DateUtil.offsetHour(now, -i);String date = DateUtil.format(offset, StrUtil.isNotBlank(format) ? format : "HH");list.add(date);}break;}return list;}/*** 两个年份之间的X轴* 如果 开始年份 >= 结束年份,则只返回开始年份** @return*/public static List<String> yearBetween(LocalDate startDate, LocalDate endDate) {Integer start = Integer.parseInt(LocalDateTimeUtil.format(startDate, DatePattern.NORM_YEAR_PATTERN));Integer end = Integer.parseInt(LocalDateTimeUtil.format(endDate, DatePattern.NORM_YEAR_PATTERN));List<String> list = new LinkedList<>();list.add(start.toString());if (start >= end) {return list;}while (start < end) {start += 1;list.add(start.toString());}return list;}/*** 判断字符串时间* dateTime 时间字符串* type 1 月 2 季度 3 年** @return*/public static String getByString(String dateTime, Integer type) throws ParseException {Date parses = new SimpleDateFormat(DatePattern.NORM_DATE_PATTERN).parse(dateTime);StringBuilder result = new StringBuilder();switch (type) {case 1:result.append(DateUtil.format(parses, DatePattern.NORM_MONTH_PATTERN));break;case 2:int quarter = DateUtil.quarter(parses);result.append(DateUtil.format(parses, DatePattern.NORM_YEAR_PATTERN)).append("第").append(quarter).append("季度");break;case 3:result.append(DateUtil.format(parses, DatePattern.NORM_YEAR_PATTERN));break;}return result.toString();}/*** 校验日期格式** @param date* @param format*/public static boolean isValidDate(String date, String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);sdf.setLenient(false);try {sdf.parse(date);} catch (Exception e) {return false;}return true;}/*** 校验日期格式** @param date* @return*/public static boolean isValidDate(String date) {return isValidDate(date, DatePattern.NORM_DATE_PATTERN);}/*** 传过来的LocalDate类型的日期,距当前时间,相差多少年* 可计算年龄,工龄等* 返回Integer类型*/public static Integer getYear(LocalDate localDate){//传过来的日期DateTimeFormatter df = DateTimeFormatter.ofPattern(DatePattern.NORM_YEAR_PATTERN);String dateStr = df.format(localDate);Long yearLong = Long.parseLong(dateStr);//当前日期LocalDate yearNow = LocalDate.now();String yearNowStr = df.format(yearNow);Long yearNowLong = Long.parseLong(yearNowStr);//当前 - 传过来的参数long age = yearNowLong - yearLong;return Math.toIntExact(age);}//写个main方法 试试效果public static void main(String[] args) {List<String> dateScope = LocalDateUtil.createDateScope(3, 6);for (String e : dateScope){log.info(e);}System.out.println("换行");//替换为横线List<String> collect = dateScope.stream().map(e -> e.replace("/", "-")).collect(Collectors.toList());for (String e : collect){log.info(e);}}
}

更多推荐

java日期偏移量方法

本文发布于:2023-11-30 12:21:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650004.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:日期   方法   偏移量   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!