LocalTime,LocalDateTime

package com.qiake.credit.task.utils;

import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class DateTimeUtils {
	public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HHmmss");
	public static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
	public static final DateTimeFormatter SHORT_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyMMdd");
	public static final DateTimeFormatter SHORT_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmss");
	public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
	public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
	public static final DateTimeFormatter DATE_FORMAT_SECOND = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss");
	public static final DateTimeFormatter DATE_FORMAT_SECOND_ROD = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
	public static final DateTimeFormatter DATE_FORMAT_DAY_ROD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
	public static final DateTimeFormatter DATE_FORMAT_DAY = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
	public static final DateTimeFormatter DATE_FORMAT_DAY_POINT = DateTimeFormatter.ofPattern("yyyy.MM.dd");
	public static final DateTimeFormatter DTF_YYYYMMDDHHMMSSSSS = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");

	private DateTimeUtils() {
		throw new IllegalStateException("Utility class");
	}

	public static LocalDate parseLocalDate(String dateStr, DateTimeFormatter formatter) {
		return LocalDate.parse(dateStr, formatter);
	}

	public static LocalDateTime parseLocalDateTime(String dateTimeStr, DateTimeFormatter formatter) {
		return LocalDateTime.parse(dateTimeStr, formatter);
	}

	public static LocalTime parseLocalTime(String timeStr, DateTimeFormatter formatter) {
		return LocalTime.parse(timeStr, formatter);
	}

	public static String formatLocalDate(LocalDate date, DateTimeFormatter formatter) {
		return date.format(formatter);
	}

	public static String formatLocalDateTime(LocalDateTime datetime, DateTimeFormatter formatter) {
		return datetime.format(formatter);
	}

	public static String formatLocalTime(LocalTime time, DateTimeFormatter formatter) {
		return time.format(formatter);
	}

	/** 日期相隔月數 */
	public static long periodMonths(LocalDate startDateInclusive, LocalDate endDateExclusive) {
		return startDateInclusive.until(endDateExclusive, ChronoUnit.MONTHS);
	}

	/** 日期相隔月數 */
	public static long periodTimeMonths(LocalDateTime startDateInclusive, LocalDateTime endDateExclusive) {
		return startDateInclusive.until(endDateExclusive, ChronoUnit.MONTHS);
	}

	/** 日期相隔天數 */
	public static long periodDays(LocalDate startDateInclusive, LocalDate endDateExclusive) {
		return startDateInclusive.until(endDateExclusive, ChronoUnit.DAYS);
	}

	/**
	 *  實現給定某日期,判斷是星期幾
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static int getWeekday(LocalDate date) {
		switch (String.valueOf(date.getDayOfWeek())) {
		case "MONDAY":
			return 1;
		case "TUESDAY":
			return 2;
		case "WEDNESDAY":
			return 3;
		case "THURSDAY":
			return 4;
		case "FRIDAY":
			return 5;
		case "SATURDAY":
			return 6;
		case "SUNDAY":
			return 7;
		default:
			return 0;
		}
	}

	/***
	 * 該方法主要要來計算芝麻分更新時間
	 * 當前日期號數<day,則更新時間爲當月day號,號數>day,爲下個月day號
	 * @param date
	 * @param day
	 * @return
	 */
	public static LocalDate getZhiMaScoreUpdateTime(LocalDate date, int day) {
		int mDay = date.getDayOfMonth();//獲取當前月份的日期號碼
		if (mDay < day) {
			date = LocalDate.of(date.getYear(), date.getMonth(), day);
		} else {
			date = LocalDate.of(date.getYear(), date.getMonth(), day).plusMonths(1);
		}
		return date;
	}

	/**
	 * 將毫秒時間戳轉化爲String
	 *
	 * @param mill
	 * @return
	 */
	public static String convert(String mill) {
		LocalDateTime dateTime = LocalDateTime.ofEpochSecond(Long.parseLong(mill) / 1000, 0, ZoneOffset.ofHours(8));
		return formatLocalDateTime(dateTime, DATE_FORMAT_SECOND_ROD);
	}

	/***
	 * LocalDateTime轉Date
	 * @param localDateTime
	 * @return
	 */
	public static Date localDateTimeToDate(LocalDateTime localDateTime) {
		return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
	}

	/***
	 * LocalDate轉Date
	 * @param localDateTime
	 * @return
	 */
	public static Date localDateToDate(LocalDate localDate) {
		return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
	}

	/***
	 * Date轉LocalDateTime
	 * @param date
	 * @return
	 */
	public static LocalDateTime dateToLocalDateTime(Date date) {
		return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
	}

	/***
	 * Date轉LocalDate
	 * @param date
	 * @return
	 */
	public static LocalDate dateToLocalDate(Date date) {
		return dateToLocalDateTime(date).toLocalDate();
	}

	/***
	 * String dateTime  轉 Date
	 * @param str
	 * @param formatter
	 * @return
	 */
	public static Date strDateTimeToDate(String str, DateTimeFormatter formatter) {
		return localDateTimeToDate(parseLocalDateTime(str, formatter));
	}

	/***
	 * String date  轉 Date
	 * @param str
	 * @param formatter
	 * @return
	 */
	public static Date strDateToDate(String str, DateTimeFormatter formatter) {
		return localDateToDate(parseLocalDate(str, formatter));
	}
}
相關文章
相關標籤/搜索