add dateutil

dev
ehlxr 2020-12-09 16:52:11 +08:00
parent 52db196264
commit 385edaf9e2
2 changed files with 277 additions and 0 deletions

BIN
resources/.DS_Store vendored

Binary file not shown.

View File

@ -0,0 +1,277 @@
package me.ehlxr.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
/**
*
*
* @author ehlxr
* @since 2020-12-09 16:51.
*/
public class DateUtil {
public static final DateTimeFormatter FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static final DateTimeFormatter FORMAT_1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
public static final DateTimeFormatter FORMAT_2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static final DateTimeFormatter FORMAT_3 = DateTimeFormatter.ofPattern("yyyyMMdd");
public static final DateTimeFormatter FORMAT_4 = DateTimeFormatter.ofPattern("yyyy-MM");
/**
* "Asia/Shanghai"
*/
private static final ZoneId ZONE_ID = ZoneId.of(ZoneId.SHORT_IDS.get("CTT"));
private DateUtil() {
}
/**
*
*
* @return {@link LocalDateTime}
*/
public static LocalDateTime currentDateTime() {
return LocalDateTime.now(ZONE_ID);
}
/**
*
*
* @return "yyyy-MM-dd HH:mm:ss"
*/
public static String currentDateTimeStr() {
return LocalDateTime.now(ZONE_ID).format(FORMAT);
}
/**
*
*
* @return "yyyy-MM-dd"
*/
public static String currentDateStr() {
return LocalDate.now(ZONE_ID).toString();
}
/**
*
*
* @param amount
* @return "yyyy-MM-dd HH:mm:ss"
*/
public static String pastMonthsDateTime(long amount) {
return LocalDateTime.now(ZONE_ID).minus(amount, ChronoUnit.MONTHS).format(FORMAT);
}
/**
*
*
* @param amount
* @return "yyyy-MM-dd"
*/
public static String pastMonthsDate(long amount) {
return LocalDate.now(ZONE_ID).minus(amount, ChronoUnit.MONTHS).toString();
}
/**
* yyyy-MM-dd HH:mm:ss
*
* @param amount
* @return "yyyy-MM-dd HH:mm:ss"
*/
public static String pastMonthsDate(String localDateTime, long amount) {
return LocalDateTime.parse(localDateTime, FORMAT).minus(amount, ChronoUnit.MONTHS).format(FORMAT);
}
/**
*
*/
public static String asStringWithWeek(String date) {
LocalDateTime localDateTime = LocalDateTime.parse(date, FORMAT);
String[] weekDays = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};
int w = localDateTime.getDayOfWeek().getValue() - 1;
return localDateTime.format(FORMAT) + " " + weekDays[w];
}
/**
* LocalDate Date
*
* @param localDate {@link LocalDate}
* @return {@link Date}
*/
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZONE_ID).toInstant());
}
/**
* LocalDateTime Date
*
* @param localDateTime {@link LocalDateTime}
* @return {@link Date}
*/
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZONE_ID).toInstant());
}
/**
* Date LocalDate
*
* @param date {@link Date}
* @return {@link LocalDate}
*/
public static LocalDate asLocalDate(Date date) {
return date.toInstant().atZone(ZONE_ID).toLocalDate();
// return Instant.ofEpochMilli(date.getTime()).atZone(ZONE_ID).toLocalDate();
}
/**
* Date LocalDateTime
*
* @param date {@link Date}
* @return {@link LocalDateTime}
*/
public static LocalDateTime asLocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZONE_ID);
// return date.toInstant().atZone(ZONE_ID).toLocalDateTime();
// return Instant.ofEpochMilli(date.getTime()).atZone(ZONE_ID).toLocalDateTime();
}
/**
* LocalDateTime
*
* @param date yyyy-MM-dd HH:mm:ss
* @return {@link LocalDateTime}
*/
public static LocalDateTime asLocalDateTime(String date) {
return asLocalDateTime(date, FORMAT);
}
/**
* LocalDateTime
*
* @param date
* @param pattern yyyy-MM-dd HH:mm:ss
* @return {@link LocalDateTime}
*/
public static LocalDateTime asLocalDateTime(String date, String pattern) {
return asLocalDateTime(date, DateTimeFormatter.ofPattern(pattern));
}
private static LocalDateTime asLocalDateTime(String date, DateTimeFormatter formatter) {
return LocalDateTime.parse(date, formatter);
}
public static Date parse(String strDate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(strDate);
}
/**
*
*
* @param birthDay
* @return
*/
public static int getAge(Date birthDay) {
Calendar cal = Calendar.getInstance();
//出生日期晚于当前时间,无法计算
if (cal.before(birthDay)) {
throw new IllegalArgumentException("The birthDay is before Now.It's unbelievable!");
}
//当前年份
int yearNow = cal.get(Calendar.YEAR);
//当前月份
int monthNow = cal.get(Calendar.MONTH);
//当前日期
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDay);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH);
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
//计算整岁数
int age = yearNow - yearBirth;
if (monthNow <= monthBirth) {
if (monthNow == monthBirth) {
//当前日期在生日之前,年龄减一
if (dayOfMonthNow < dayOfMonthBirth) {
age--;
}
} else {
//当前月份在生日之前,年龄减一
age--;
}
}
return age;
}
public static Integer getDifMonth(Date startDate, Date endDate) {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
start.setTime(startDate);
end.setTime(endDate);
int result = end.get(Calendar.MONTH) - start.get(Calendar.MONTH);
int month = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12;
return Math.abs(month + result);
}
public static void main(String[] args) {
try {
System.out.println(getDifMonth(DateUtil.parse("2020-11-02 15:43:37"), DateUtil.parse("2020-10-01 15:43:37")));
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(asStringWithWeek(currentDateTimeStr()));
System.out.println("DateUtil.currentDateTime()" + DateUtil.currentDateTimeStr());
System.out.println("DateUtil.currentDate()" + DateUtil.currentDateStr());
System.out.println("DateUtil.passMonthsDateTime(3)" + DateUtil.pastMonthsDateTime(3));
System.out.println("DateUtil.passMonthsDate(3)" + DateUtil.pastMonthsDate(3));
// DateTimeFormatter t = new DateTimeFormatterBuilder()
// .parseCaseInsensitive()
// .append(ISO_LOCAL_DATE)
// .appendLiteral(' ')
// .append(new DateTimeFormatterBuilder()
// .appendValue(HOUR_OF_DAY, 2)
// .appendLiteral(':')
// .appendValue(MINUTE_OF_HOUR, 2)
// .optionalStart()
// .appendLiteral(':')
// .appendValue(SECOND_OF_MINUTE, 2).toFormatter(Locale.CHINA)).toFormatter(Locale.CHINA);
//
// System.out.println(LocalDateTime.now().format(t));
System.out.println("FORMAT Pattern(\"yyyy-MM-dd HH:mm:ss\")");
System.out.println("FORMAT_1 Pattern(\"yyyy-MM-dd HH:mm:ss.S\")");
System.out.println("LocalDateTime.parse(\"2019-07-25 17:15:23.0\", FORMAT_1)" + LocalDateTime.parse("2019-07-25 17:15:23.0", FORMAT_1));
System.out.println("passMonthsDate(\"2019-07-25 17:15:23\", 3)" + pastMonthsDate("2019-07-25 17:15:23", 3));
System.out.println("LocalDateTime.parse(\"2019-07-25 17:15:23.0\", FORMAT_1).format(FORMAT)" + LocalDateTime.parse("2019-07-25 17:15:23.0", FORMAT_1).format(FORMAT));
System.out.println("LocalDate.parse(\"2019-07-25 17:15:23.0\", FORMAT).toString()" + LocalDate.parse("2019-07-25 17:15:23.0", FORMAT_1).toString());
// Set<String> set = ZoneId.getAvailableZoneIds();
// set.forEach(System.out::println);
// createTime = "2019-07-25 17:15:23";
// createTime = createTime.substring(0, 19);
// System.out.println(createTime);
Date date = new Date();
System.out.println("当前时间 Date" + date);
System.out.println("当前时间 Date asLocalDate" + DateUtil.asLocalDate(date));
System.out.println("当前时间 Date asLocalDateTime" + DateUtil.asLocalDateTime(date).format(FORMAT));
LocalDateTime localDateTime = DateUtil.currentDateTime();
System.out.println("当前时间 localDateTime" + localDateTime);
System.out.println("当前时间 LocalDateTime asDate" + DateUtil.asDate(localDateTime));
System.out.println("当前时间 LocalDate asDate" + DateUtil.asDate(LocalDate.now()));
System.out.println(ChronoUnit.YEARS.between(LocalDate.now(), LocalDate.parse("1991-08-30", FORMAT_2)));
}
}