import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.*;
/**
* Java8時(shí)間方法LocalDate和LocalDateTime
* getYear() int 獲取當(dāng)前日期的年份
* getMonth() Month 獲取當(dāng)前日期的月份對(duì)象
* getMonthValue() int 獲取當(dāng)前日期是第幾月
* getDayOfWeek() DayOfWeek 表示該對(duì)象表示的日期是星期幾
* getDayOfMonth() int 表示該對(duì)象表示的日期是這個(gè)月第幾天
* getDayOfYear() int 表示該對(duì)象表示的日期是今年第幾天
* withYear(int year) LocalDate 修改當(dāng)前對(duì)象的年份
* withMonth(int month) LocalDate 修改當(dāng)前對(duì)象的月份
* withDayOfMonth(int dayOfMonth) LocalDate 修改當(dāng)前對(duì)象在當(dāng)月的日期
* isLeapYear() boolean 是否是閏年
* lengthOfMonth() int 這個(gè)月有多少天
* lengthOfYear() int 該對(duì)象表示的年份有多少天(365或者366)
* plusYears(long yearsToAdd) LocalDate 當(dāng)前對(duì)象增加指定的年份數(shù)
* plusMonths(long monthsToAdd) LocalDate 當(dāng)前對(duì)象增加指定的月份數(shù)
* plusWeeks(long weeksToAdd) LocalDate 當(dāng)前對(duì)象增加指定的周數(shù)
* plusDays(long daysToAdd) LocalDate 當(dāng)前對(duì)象增加指定的天數(shù)
* minusYears(long yearsToSubtract) LocalDate 當(dāng)前對(duì)象減去指定的年數(shù)
* minusMonths(long monthsToSubtract) LocalDate 當(dāng)前對(duì)象減去注定的月數(shù)
* minusWeeks(long weeksToSubtract) LocalDate 當(dāng)前對(duì)象減去指定的周數(shù)
* minusDays(long daysToSubtract) LocalDate 當(dāng)前對(duì)象減去指定的天數(shù)
* compareTo(ChronoLocalDate other) int 比較當(dāng)前對(duì)象和other對(duì)象在時(shí)間上的大小作媚,返回值如果為正纸泡,則當(dāng)前對(duì)象時(shí)間較晚弟灼,
* isBefore(ChronoLocalDate other) boolean 比較當(dāng)前對(duì)象日期是否在other對(duì)象日期之前
* isAfter(ChronoLocalDate other) boolean 比較當(dāng)前對(duì)象日期是否在other對(duì)象日期之后
* isEqual(ChronoLocalDate other) boolean 比較兩個(gè)日期對(duì)象是否相等
*/
public class DateUtils4Java8 {
public static final String DATE_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_FORMAT_SHORT = "yyyy-MM-dd";
public static final String DATE_FORMAT_COMPACT = "yyyyMMdd";
public static final String DATE_FORMAT_COMPACTFULL = "yyyyMMddHHmmss";
public static final String DATE_FORMAT_FULL_MSEL = "yyyyMMddHHmmssSSSS";
public static final String DATE_YEAR_MONTH = "yyyyMM";
public static final String DATE_FORMAT_FULL_MSE = "yyyyMMddHHmmssSSS";
/**
* 獲取系統(tǒng)當(dāng)前日期
*
* @return
*/
public static Date getCurrentDate() {
return new Date();
}
/**
* 獲取系統(tǒng)當(dāng)前日期
*
* @return
*/
public static LocalDateTime getCurrentLocalDateTime() {
return LocalDateTime.now();
}
/**
* 根據(jù)時(shí)間格式返回對(duì)應(yīng)的String類(lèi)型的時(shí)間
*
* @param format
* @return
*/
public static String getCurDateTime(String format) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
String dataTime = now.format(dateTimeFormatter);
return dataTime;
}
/**
* 得到當(dāng)前日期
*
* @return String 當(dāng)前日期 yyyy-MM-dd HH:mm:ss格式
* @author kevin
*/
public static String getCurDateTimeFull() {
return getCurDateTime(DATE_FORMAT_FULL);
}
/**
* 得到當(dāng)前日期
*
* @return String 當(dāng)前日期 yyyyMMddHHmmss格式
* @author kevin
*/
public static String getCurDateTime1() {
return getCurDateTime(DATE_FORMAT_FULL);
}
/**
* 得到當(dāng)前日期YYYYMM格式
*
* @return String 當(dāng)前日期 yyyyMM格式
* @author kevin
*/
public static String getCurDateYYYYMM() {
return getCurDateTime(DATE_YEAR_MONTH);
}
/**
* 得到當(dāng)前日期
*
* @return String 當(dāng)前日期 yyyyMMdd格式
* @author kevin
*/
public static String getCurDateYYYYMMDD() {
return getCurDateTime(DATE_FORMAT_COMPACT);
}
/**
* 判斷是否是今天
*
* @param strDate
* @return
*/
public static boolean isCurrentDay(String strDate) {
boolean bRet = false;
LocalDate strLocalDate = LocalDate.parse(strDate);
if (LocalDate.now().getYear() == strLocalDate.getYear()) {
MonthDay monthDay = MonthDay.from(strLocalDate);
MonthDay today = MonthDay.from(LocalDate.now());
return monthDay.equals(today);
}
return bRet;
}
/**
* 獲取幾小時(shí)后的時(shí)間
*
* @param hour
* @param format
* @return
*/
public static String getAfterDateTime(int hour, String format) {
LocalTime localTime = LocalTime.now().plusHours(hour);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
String dataTime = localTime.format(dateTimeFormatter);
return dataTime;
}
/**
* 當(dāng)前日期時(shí)間戳(yyyyMMddHHmmssSSSS)
*
* @return
* @author liangxuekai
*/
public static String getTimeStamp() {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_FORMAT_FULL_MSEL);
return now.format(dateTimeFormatter);
}
/**
* 日期轉(zhuǎn)字符串
*
* @return String
* @author kevin
*/
public static String parseDateToString(Date thedate, String format) {
if (thedate != null) {
Instant instant = thedate.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(dateTimeFormatter);
}
return null;
}
/**
* parseDateToString(Date thedate, String format)的重載方法
*
* @param thedate
* @return
*/
public static String parseDateToString(Date thedate) {
// String format = "yyyy-MM-dd";
return parseDateToString(thedate, DATE_FORMAT_FULL);
}
/**
* 字符串轉(zhuǎn)日期
*
* @return Date
* @author kevin
*/
public static Date parseStringToDate(String thedate, String format) {
DateFormat sdf = new SimpleDateFormat(format);
Date dd1 = null;
try {
dd1 = sdf.parse(thedate);
} catch (ParseException e) {
e.printStackTrace();
}
return dd1;
}
/**
* 由String型日期轉(zhuǎn)成format形式String
*
* @param format1 原先格式
* @param format2 轉(zhuǎn)化格式
* @return String
* @author kevin
*/
public static String changeFormatDateString(String format1, String format2, String strDate) {
if (strDate == null)
return "";
if (strDate.length() >= format1.length() && format1.length() >= format2.length()) {
return parseDateToString(parseStringToDate(strDate, format1), format2);
}
return strDate;
}
/**
* 得到當(dāng)前日期的前N天時(shí)間 yyyymmdd
*
* @param format
* @param day
* @return
*/
public static String beforeNDaysDate(String format, int day) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
if (day > 0) {
return LocalDateTime.now().minusDays(day).format(dateTimeFormatter);
}
return null;
}
/**
* 獲得N個(gè)月后的日期
* <p>
* theDate 日期
* <p>
* int month 月數(shù)
* <p>
* format 格式
*/
public static String afterNMonthDate(String theDate, int month, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(theDate,dateTimeFormatter)
.plusMonths(month)
.format(dateTimeFormatter);
}
/**
* 得到N天后的日期
*
* @param theDate 某日期
* 格式 yyyy-MM-dd
* @param nDayNum N天
* @return String N天后的日期
* @author kevin
*/
public static String afterNDaysDate(String theDate, Integer nDayNum, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(theDate,dateTimeFormatter)
.plusDays(nDayNum)
.format(dateTimeFormatter);
}
/**
* 得到N小時(shí)后的日期
*
* @param theDate 時(shí)間
* @param nHourNum N小時(shí)數(shù)
* @param format 時(shí)間格式
* @return
*/
public static String afterNHoursDate(String theDate, Integer nHourNum, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(theDate,dateTimeFormatter)
.plusHours(nHourNum)
.format(dateTimeFormatter);
}
/**
* 得到N分鐘后的日期
*
* @param theDate
* @param nMinNum
* @param format
* @return
*/
public static String afterNMinsDate(String theDate, Integer nMinNum, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(theDate,dateTimeFormatter)
.plusMinutes(nMinNum)
.format(dateTimeFormatter);
}
/**
* 得到N秒后的日期
* @param theDate
* @param nSecNum
* @param format
* @return
*/
public static String afterNSecondsDate(String theDate, Integer nSecNum, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(theDate,dateTimeFormatter)
.plusSeconds(nSecNum)
.format(dateTimeFormatter);
}
// 比較兩個(gè)字符串格式日期大小,帶格式的日期
public static boolean isBefore(String strdat1, String strdat2, String format) {
try {
Date dat1 = parseStringToDate(strdat1, format);
Date dat2 = parseStringToDate(strdat2, format);
return dat1.before(dat2);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
// 比較兩個(gè)字符串格式日期大小,帶格式的日期,返回int
public static long isBefore_int(String strdat1, String strdat2, String format) {
long result = 0;
try {
Date dat1 = parseStringToDate(strdat1, format);
Date dat2 = parseStringToDate(strdat2, format);
return dat2.getTime() - dat1.getTime();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/*
* 得到上一個(gè)月或者下一個(gè)月的日期
*/
public static String getDayafterMonth(String theDate, int month, String formatStr) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatStr);
return LocalDateTime.parse(theDate).plusMonths(month).format(dateTimeFormatter);
/* Calendar now = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
Date dat1 = parseStringToDate(theDate, formatStr);
now.setTime(dat1);
sdf.setTimeZone(TimeZone.getDefault());
now.add(Calendar.MONTH, month);
return sdf.format(now.getTime());*/
}
/**
* 將秒轉(zhuǎn)換為小時(shí)分秒等
*
* @param sec
* @return
*/
public String changeTime(int sec) {
String temp = "";
if (sec < 60) {
temp = "" + sec + "秒";
} else if (sec < 3600) {
temp = "" + sec / 60 + "分" + sec % 60 + "秒";
} else {
temp = "" + sec / 3600 + "小時(shí)" + (sec % 3600) / 60 + "分" + sec % 60 + "秒";
}
return temp;
}
/**
* 方法描述:
* 計(jì)算兩個(gè)日期相差天數(shù)
*
* @param end 結(jié)束日期
* @param start 開(kāi)始日期
* @return 作者:liangxuekai
* 日期:2018 2018年1月31日
*/
public static int getSubDays(String end, String start) {
LocalDate startDate = LocalDate.parse(start);
LocalDate endDate = LocalDate.parse(end);
Long between = ChronoUnit.DAYS.between(startDate, endDate);
return between.intValue();
}
public static String getTimeDiff(Date time1, Date time2) throws Exception {
long l = time1.getTime() - time2.getTime();
String returnStr = "";
long day = l / (24 * 60 * 60 * 1000);
if (day > 0) {
returnStr += (day + "天");
}
long hour = (l / (60 * 60 * 1000) - day * 24);
if (hour > 0) {
returnStr += (hour + "小時(shí)");
}
long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
if (min > 0) {
returnStr += (min + "分");
}
long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
if (s > 0) {
returnStr += (s + "秒");
}
return returnStr;
}
}`
Java8時(shí)間工具類(lèi)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坟比,“玉大人,你說(shuō)我怎么就攤上這事柠衅〖眨” “怎么了贷祈?”我有些...
- 文/不壞的土叔 我叫張陵势誊,是天一觀的道長(zhǎng)粟耻。 經(jīng)常有香客問(wèn)我眉踱,道長(zhǎng),這世上最難降的妖魔是什么册烈? 我笑而不...
- 正文 為了忘掉前任赏僧,我火速辦了婚禮谈宛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窑滞。我一直安慰自己哀卫,他們只是感情好撬槽,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布侄柔。 她就那樣靜靜地躺著,像睡著了一般移剪。 火紅的嫁衣襯著肌膚如雪纵苛。 梳的紋絲不亂的頭發(fā)上,一...
- 那天取试,我揣著相機(jī)與錄音瞬浓,去河邊找鬼烙博。 笑死瑟蜈,一個(gè)胖子當(dāng)著我的面吹牛铺根,可吹牛的內(nèi)容都是我干的乔宿。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼掂林,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泻帮!你這毒婦竟也來(lái)了计寇?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤元莫,失蹤者是張志新(化名)和其女友劉穎蝶押,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茎截,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡稼虎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年招刨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沉眶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布盲再,位于F島的核電站,受9級(jí)特大地震影響答朋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禽绪,卻給世界環(huán)境...
- 文/蒙蒙 一丐一、第九天 我趴在偏房一處隱蔽的房頂上張望淹冰。 院中可真熱鬧,春花似錦柠衍、人聲如沸晶乔。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至回还,卻和暖如春叹洲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝗柔。 一陣腳步聲響...
- 正文 我出身青樓签钩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铅檩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法兔沃,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法乒疏,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
- Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理窍侧,服務(wù)發(fā)現(xiàn)伟件,斷路器,智...
- ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線(xiàn)程谴返,因...
- 首先为迈,@空中樓閣Z,我今天就著實(shí)被你橫向領(lǐng)導(dǎo)了一把葫辐。 在我整個(gè)白天都沒(méi)有半點(diǎn)思路伴郁,已經(jīng)準(zhǔn)備放棄晨讀感悟時(shí),你的及時(shí)...