java8 日期工具類
import org.apache.commons.lang3.StringUtils;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
public class DateUtil {
static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
static final DateTimeFormatter dtf_yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd");
static final DateTimeFormatter dtf_yyyyMM = DateTimeFormatter.ofPattern("yyyyMM");
static final DateTimeFormatter dtf_yyyyMM2 = DateTimeFormatter.ofPattern("yyyy年MM月");
static final DateTimeFormatter dtf_yyyyMMddHHmmss = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
static final DateTimeFormatter dtf_yyyyMMddHHmm = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
static final DateTimeFormatter dtf_yyyyMMddHH = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
static final DateTimeFormatter dtf_yyyyMMddHHss = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
static final DateTimeFormatter dtf_yyyyMMdd2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static String now(){
return dtf.format(LocalDateTime.now());
}
public static String now_yyyyMMdd(){
return dtf_yyyyMMdd.format(LocalDateTime.now());
}
public static String now_yyyy(){
return LocalDateTime.now().getYear()+"";
}
public static int now_yyyy_int(){
return LocalDateTime.now().getYear();
}
public static String now_MM(){
int MM = LocalDateTime.now().getMonthValue();
if(MM < 10){
return "0"+MM;
}
return MM+"";
}
public static String now_yyyyMM(){
return dtf_yyyyMM.format(LocalDateTime.now());
}
public static int now_MM_int(){
return LocalDateTime.now().getMonthValue();
}
public static int now_day_int(){
return LocalDateTime.now().getDayOfMonth();
}
public static int now_day_int(long modified){
return Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime().getDayOfMonth();
}
public static String fmt(long modified){
return dtf_yyyyMMdd.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());
}
public static String fmt_yyyyMM(long modified){
return dtf_yyyyMM.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());
}
public static String fmt_yyyyMM2(long modified){
return dtf_yyyyMM2.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());
}
public static String fmt_yyyyMMddHHmmss(long modified){
return dtf_yyyyMMddHHss.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime());
}
/**
* 本年已過天數
* @param
* @return
*/
public static long now_dayCount_int(){
return ChronoUnit.DAYS.between(LocalDate.ofYearDay(LocalDate.now().getYear(),1),LocalDate.now());
}
public static String now_yyyyMMddHH(){
return dtf_yyyyMMddHH.format(LocalDateTime.now());
}
public static String now_yyyyMMdd2(){
return dtf_yyyyMMdd2.format(LocalDateTime.now());
}
public static String now_yyyyMMddHHmmss(){
return dtf_yyyyMMddHHmmss.format(LocalDateTime.now());
}
//月的第一天日期
public static LocalDate monthFast(int year,int month){
LocalDate start = LocalDate.of(year, month, 1);
if (start.getDayOfWeek().getValue() >= 1) {
start = start.minusDays(start.getDayOfWeek().getValue());
}
return start;
}
public static LocalDate monthLast(int year,int month){
LocalDate start = LocalDate.of(year, month, 1);
start = start.with(TemporalAdjusters.lastDayOfMonth());
if (start.getDayOfWeek().getValue() >= 1) {
start = start.minusDays(start.getDayOfWeek().getValue()-1);
}
return start;
}
public static LocalDate monthWeekLastDate(int year,int month){
LocalDate start = monthLast(year,month);
start = start.plusDays(6);
return start;
}
public static LocalDate monthWeekFastDate(int year,int month){
LocalDate start = LocalDate.of(year, month, 1);
if (start.getDayOfWeek().getValue() >= 1) {
start = start.minusDays(start.getDayOfWeek().getValue()-1);
}
return start;
}
public static int monthWeekDateCount(int year,int month){
LocalDate start = DateUtil.monthWeekFastDate(year,month);
LocalDate end = DateUtil.monthWeekLastDate(year,month);
return Long.valueOf(end.toEpochDay()-start.toEpochDay()).intValue()+1;
}
public static List monthWeekDates(int year, int month){
String date = LocalDate.now().toString();
return monthWeekDates(year,month,date);
}
/**
* 根據指定日期計算本週週一至週日的日期
* @param date
* @return
*/
public static List weekDates(String date){
List<String> weekDates = new LinkedList<>();
String[] date2 = date.split("-");
int year2 = Integer.valueOf(date2[0]).intValue();
int month2 = Integer.valueOf(date2[1]).intValue();
int d2 = Integer.valueOf(date2[2]).intValue();
LocalDate start = LocalDate.of(year2,month2,d2);
// System.out.print("日期:"+date+",周幾:"+start.getDayOfWeek().getValue());
if (start.getDayOfWeek().getValue() > 1) {
//計算本週,週一的日期
start = start.minusDays(start.getDayOfWeek().getValue()).plusDays(1);
// System.out.println(",日期:"+start+",周幾:"+start.getDayOfWeek().getValue());
}
for(int a = 0;a< 7;a++){
weekDates.add(start.plusDays(a).toString());
}
return weekDates;
}
/**
* 根據指定日期計算本週往後計算指定週數的週一至週日的日期
* @param date
* @return
*/
public static List weekDates(String date,int weekCount){
List<List<String>> weeks = new LinkedList();
List<String> weekDates = new LinkedList<>();
String[] date2 = date.split("-");
int year2 = Integer.valueOf(date2[0]).intValue();
int month2 = Integer.valueOf(date2[1]).intValue();
int d2 = Integer.valueOf(date2[2]).intValue();
LocalDate start = LocalDate.of(year2,month2,d2);
// System.out.print("日期:"+date+",周幾:"+start.getDayOfWeek().getValue());
if (start.getDayOfWeek().getValue() > 1) {
//計算本週,週一的日期
start = start.minusDays(start.getDayOfWeek().getValue()).plusDays(1);
// System.out.println(",日期:"+start+",周幾:"+start.getDayOfWeek().getValue());
}
for(int a = 0,alen = weekCount*7;a < alen;a++){
weekDates.add(start.plusDays(a).toString());
if(weekDates.size() == 7){
List<String> weekDates2 = new LinkedList<>();
weekDates2.addAll(weekDates);
weeks.add(weekDates2);
weekDates = new LinkedList<>();
}
}
return weeks;
}
/**
* 返回指定年份月份的每週的週一到週日集合,超出下一週不在範圍,超出本月不在範圍
* @param year 年份
* @param month 月份
* @param date 日期
* @return
*/
public static List monthWeekDates(int year, int month,String date){
List<List<String>> weeks = new LinkedList();
List<String> weekDates = new LinkedList<>();
LocalDate start = null,end = null;
if(StringUtils.isNotEmpty(date)){
String[] date2 = date.split("-");
int year2 = Integer.valueOf(date2[0]).intValue();
int month2 = Integer.valueOf(date2[1]).intValue();
int d2 = Integer.valueOf(date2[2]).intValue();
end = LocalDate.of(year2,month2,d2);
if (end.getDayOfWeek().getValue() >= 1) {
end = end.plusDays(7 - end.getDayOfWeek().getValue()+1);
}
if(end.getMonthValue() > month){
end = end.minusDays(7);
}
}
// System.out.println("日期:"+date+",下個週一:"+end);
for(int i = 0,ilen = monthWeekDateCount(year,month);i< ilen;i++) {
start = DateUtil.monthWeekFastDate(year,month);
start = start.plusDays(i);
weekDates.add(start.toString());
if(weekDates.size() == 7){
List<String> weekDates2 = new LinkedList<>();
weekDates2.addAll(weekDates);
weeks.add(weekDates2);
weekDates = new LinkedList<>();
if(start.compareTo(end) >= 0){
break;
}
}
}
return weeks;
}
public static List<List<String>> desc2(List<List<String>> list){
List<List<String>> weeks = new ArrayList<>();
for(int a = list.size();a>0;a--){
weeks.add(list.get(a-1));
}
return weeks;
}
/**
* 返回 1-7 中的一天
* @return
*/
public static int getWeekNum() {
LocalDate currentDate = LocalDate.now();
return getWeekNum(currentDate);
}
/**
* 返回 1-7 中的一天
* @return
*/
public static int getWeekNum(String date) {
return getWeekNum(LocalDate.parse(date,dtf_yyyyMMdd2));
}
/**
* 返回 1-7 中的一天
* @return
*/
public static int getWeekNum(LocalDate currentDate) {
String[][] strArray = {
{"MONDAY", "1"},
{"TUESDAY", "2"},
{"WEDNESDAY", "3"},
{"THURSDAY", "4"},
{"FRIDAY", "5"},
{"SATURDAY", "6"},
{"SUNDAY", "7"}
};
String k = String.valueOf(currentDate.getDayOfWeek());
//獲取行數
for (int i = 0; i < strArray.length; i++) {
if (k.equals(strArray[i][0])) {
k = strArray[i][1];
break;
}
}
return Integer.parseInt(k);
}
/**
* 減天數
* @param day
* @return
*/
public static String minusDays2(String date,int day) {
return dtf_yyyyMMdd2.format(LocalDate.parse(date,dtf_yyyyMMdd2).minusDays(day));
}
/**
* 減天數
* @param day
* @return
*/
public static String minusDays2(LocalDate date,int day) {
return dtf_yyyyMMdd.format(date.minusDays(day));
}
/**
* 減天數
* @param day
* @return
*/
public static String minusDays(int day){
return dtf_yyyyMMdd.format(LocalDateTime.now().minusDays(day));
}
/**
* 加天數
* @param day
* @return
*/
public static String plusDays(int day){
return dtf_yyyyMMdd.format(LocalDateTime.now().plusDays(day));
}
/**
* 加天數
* @param date
* @param day
* @return
*/
public static String plusDays2(String date,int day){
return dtf_yyyyMMdd2.format(LocalDate.parse(date, dtf_yyyyMMdd2).plusDays(day));
}
/**
* 加月數
* @param month
* @return
*/
public static String plusMonths(int month){
return dtf_yyyyMMdd.format(LocalDateTime.now().plusMonths(month));
}
/**
* 加月數
* @date 基礎時間 202004011820
* @month 加幾個月
* @return
*/
public static Long plusMonths(Long date,int month){
if(date < 200000000000L || date > 299999999999L){
return 0L;
}
return Long.valueOf(dtf_yyyyMMddHHmm.format(convert_dtfyyyyMMddHHmm(""+date).plusMonths(month)));
}
/**
* 加小時
* @param hour
* @return
*/
public static String plusHours(int hour){
return dtf.format(LocalDateTime.now().plusHours(hour));
}
/**
* 加小時
* @date 基礎時間 202004011820
* @month 加幾小時
* @return
*/
public static Long plusHours(Long date,int hour){
if(date < 200000000000L || date > 299999999999L){
return 0L;
}
return Long.valueOf(dtf.format(convert_dtfyyyyMMddHHmm(""+date).plusHours(hour)));
}
/**
* 字符串轉指定格式日期
* @param date yyyy-MM-dd HH:mm:ss 格式的時間
* @return
*/
public static LocalDateTime convert_dtf(String date){
return LocalDateTime.parse(date,dtf);
}
/**
* 字符串轉指定格式日期
* @param date yyyy-MM-dd HH:mm 格式的時間
* @return
*/
public static LocalDateTime convert_dtfyyyyMMddHHmm(String date){
return LocalDateTime.parse(date,dtf_yyyyMMddHHmm);
}
/**
* 字符串轉指定格式日期
* @param date yyyy-MM-dd HH:mm:ss 格式的時間
* @return
*/
public static LocalDateTime convert_dtfyyyyMMddHHmmss(String date){
return LocalDateTime.parse(date,dtf_yyyyMMddHHmmss);
}
/**
* 將日期轉換格式返回 yyyyMMddHHmm
* @param date yyyy-MM-dd HH:mm:ss 格式的時間
* @return
*/
public static Long get_dtfyyyyMMddHHmm(String date){
return Long.valueOf( LocalDateTime.parse(date,dtf).format(dtf_yyyyMMddHHmm));
}
/**
* 獲取指定格式的當前日期
* @return
*/
public static Long get_yyyyMMddHHmmss(String date){
return Long.valueOf( LocalDateTime.parse(date,dtf).format(dtf_yyyyMMddHHmmss));
}
/**
* 獲取指定格式的當前日期
* @return
*/
public static Long get_yyyyMMddHHmmss(){
return Long.valueOf(dtf_yyyyMMddHHmmss.format(LocalDateTime.now()));
}
/**
* 獲取指定格式的當前日期
* @return
*/
public static Long get_yyyyMMddHHmm(){
return Long.valueOf(dtf_yyyyMMddHHmm.format(LocalDateTime.now()));
}
/**
* 日期格式化爲
* @param date yyyy-MM-dd HH:mm:ss
* @return
*/
public static String format_dtf(LocalDateTime date){
return dtf_yyyyMMddHHmmss.format(date);
}
/**
* 日期格式化爲
* @param timestamp
* @return
*/
public static String format_dtf_long(Long timestamp){
Instant instant = Instant.ofEpochMilli(timestamp);
ZoneId zone = ZoneId.systemDefault();
return dtf_yyyyMMddHHmmss.format(LocalDateTime.ofInstant(instant, zone));
}
/**
* 日期格式化爲
* @param timestamp
* @return
*/
public static String format_dtf(Long timestamp){
Instant instant = Instant.ofEpochMilli(timestamp);
ZoneId zone = ZoneId.systemDefault();
return dtf.format(LocalDateTime.ofInstant(instant, zone));
}
/**
* 日期格式化爲
* @param date yyyyMMddHHmm
* @return
*/
public static String format_yyyyMMddHHmm(LocalDateTime date){
return dtf_yyyyMMddHHmm.format(date);
}
/**
* 日期格式化爲 yyyyMMddHHmm
* @param dateTime
* @return
*/
public static Long format_yyyyMMddHHmm_long(LocalDateTime dateTime){
return Long.valueOf(format_yyyyMMddHHmm(dateTime));
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.