【JAVA工具类】时间

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;

public class DateUtils {


	public static final String DATE_PATTERN = "yyyy-MM-dd";
	public final static String DATE_YM_PATTERN = "yyyyMM";
	public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
	/**
	 * 字符串转换成日期
	 * @param date 字符串格式日期
	 * @param pattern 格式
	 * @return LocalDate格式日期
	 */
	public static LocalDate parseDate(String date, String pattern) {
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
		return LocalDate.parse(date, formatter);
	}

	/**
	 * 字符串转换成LocalDateTime
	 * @param dateTime 字符串格式日期时间
	 * @param pattern 格式
	 * @return LocalDateTime格式日期时间
	 */
	public static LocalDateTime parseDateTime(String dateTime, String pattern) {
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
		return LocalDateTime.parse(dateTime, formatter);
	}

	/**
	 * 日期转换成字符串
	 * @param date 日期
	 * @param pattern 格式
	 * @return 字符串格式日期时间
	 */
	public static String parseString(LocalDate date, String pattern) {
		if (Objects.isNull(date)) {
			return "";
		}
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
		return formatter.format(date);
	}

	/**
	 * 字符串转换成LocalDateTime
	 * @param dateTime 日期时间
	 * @param pattern 格式
	 * @return 字符串格式日期时间
	 */
	public static String parseString(LocalDateTime dateTime, String pattern) {
		if (Objects.isNull(dateTime)) {
			return "";
		}
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
		return formatter.format(dateTime);
	}

	/**
	 * 转换成时间戳(毫秒)
	 * @param dateTime LocalDateTime日期
	 * @return
	 */
	public static Long toMillisecond(LocalDateTime dateTime) {
		return dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
	}

	/**
	 * 转换成时间戳(毫秒)
	 * @param date LocalDate日期
	 * @return
	 */
	public static Long toMillisecond(LocalDate date) {
		LocalDateTime dateTime = date.atStartOfDay();
		return dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
	}
	
	/**
	 * 计算两日期时间差
	 * @param date startDate 开始日期
	 * @param date endDate 结束日期
	 * @return
	 */
    public static Long calculateActualDays(LocalDate startDate, LocalDate endDate) {
        return endDate.toEpochDay() - startDate.toEpochDay() + 1;
    }

	/**
	 * 计算月份差
	 * @param date yearMonth 月份
	 * @return
	 */
    public static Long calculateActualDays(String yearMonth) {
    	String firstDay = getFirstDayOfMonth(yearMonth);
    	String lastDay = getLastDayOfMonth(yearMonth);
    	LocalDate startDate = parseDate(firstDay, DATE_PATTERN);
    	LocalDate endDate= parseDate(lastDay , DATE_PATTERN);
        return endDate.toEpochDay() - startDate.toEpochDay() + 1;
    }
    
	/**
	 * 根据日期获取月份第一天
	 * @param yearMonth yyyyMM/yyyy-MM 格式字符串
	 * @return
	 */
	public static String getFirstDayOfMonth(String yearMonth) {
		if(!yearMonth.contains("-")){
			yearMonth = yearMonth.substring(0, 4) + "-" + yearMonth.substring(4, 6);
		}
		return yearMonth + "-01";
	}

	/**
	 * 根据日期获取月份第一天
	 * @param date LocalDate日期
	 * @return
	 */
	public static LocalDate getFirstDayOfMonth(LocalDate date) {
		return date.with(TemporalAdjusters.firstDayOfMonth());
	}

	/**
	 * 获取月份最后一天
	 * @param yearMonth yyyyMM/yyyy-MM格式字符串
	 * @return
	 */
	public static String getLastDayOfMonth(String yearMonth) {
		String firstDay = getFirstDayOfMonth(yearMonth);
		LocalDate localDate = parseDate(firstDay, DATE_PATTERN);
		String lastDay = parseString(getLastDayOfMonth(localDate), DATE_PATTERN);
		return lastDay;
	}

	/**
	 * 根据日期获取月份最后一天
	 * @param date LocalDate日期
	 * @return
	 */
	public static LocalDate getLastDayOfMonth(LocalDate date) {
		return date.with(TemporalAdjusters.lastDayOfMonth());
	}

	/**
	 * 根据日期获取所在日期的年周
	 * @param date 日期 yyyy-MM-dd
	 * @return yyyyww
	 */
	public static String getWeekDateOfDay(String date){
		LocalDate localDate = LocalDate.parse(date);
		int year = localDate.get(WeekFields.ISO.weekBasedYear());
		int week = localDate.get(WeekFields.ISO.weekOfWeekBasedYear());
		String weekDate = week>=10 ? year + "" + week : year + "0" + week;

		return weekDate;
	}

	/**
	 * 根据日期获取所在日期的年周
	 * @param date LocalDate日期
	 * @return yyyyww
	 */
	public static String getWeekDateOfDay(LocalDate date){
		int year = date.get(WeekFields.ISO.weekBasedYear());
		int week = date.get(WeekFields.ISO.weekOfWeekBasedYear());
		String weekDate = week>=10 ? year + "" + week : year + "0" + week;

		return weekDate;
	}

	/**
	 * 根据年份和周数获取周一或者周日日期
	 * @param category 例如202101,代表2021年第一周
	 * @param newValue 1代表周一,2代表周二 ....7代表周日
	 * @return 日期 yyyy-MM-dd
	 */
	public static LocalDate getDayOfWeek(String category, long newValue){
		int year = Integer.valueOf(category.substring(0,4));
		int numWeek = Integer.valueOf(category.substring(4,6));
		WeekFields weekFields= WeekFields.ISO;
		LocalDate now = LocalDate.now();
		LocalDate localDate = now.withYear(year).with(weekFields.weekOfYear(),numWeek);
		LocalDate goalLocalDate  = localDate.with(weekFields.dayOfWeek(), newValue);
		return goalLocalDate;
	}
	
	/**
	 * 获取日期所属星期几
	 * @param localDate 日期
	 * @return 1,2.. (星期一,星期二...)
	 */
	public static Integer getWeekIndex(LocalDate localDate){
		return localDate.getDayOfWeek().getValue();
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值