平時(shí)在項(xiàng)目開發(fā)中可能很多地方需要處理時(shí)間問題的方法,這里總結(jié)一些常用的時(shí)間方法:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
* @Description <日期工具類>
* @author liwang
* @date 2017年11月14日
* @version
*/
public class DateUtil {
/**
* 根據(jù)時(shí)間字符串獲取日期
* @param dataStr 時(shí)間字符串
* @return 日期
*/
public static Date tranStrToDate(String dataStr) {
try {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.parse(dataStr);
}
catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 根據(jù)傳入時(shí)間轉(zhuǎn)換為毫秒值橄维,附加納秒后六位
* @param dateTime 日期
* @return String
* @throws ParseException 異常
*/
public static String getTimeToNanos(String dateTime) throws ParseException {
Calendar c = Calendar.getInstance();
c.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateTime));
Long curNanos = Math.abs(System.nanoTime());
String nanos = curNanos.toString();
return c.getTimeInMillis() + nanos.substring(nanos.length() - 6);
}
/**
* 根據(jù)傳入的毫秒值轉(zhuǎn)換為yyyy-MM-dd HH:mm:ss的日期字符串
* @param dateTime 日期
* @return String
*/
public static String getDateStrByTimeMillis(long dateTime) {
Date date = new Date(dateTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
/**
* 獲取當(dāng)前日期
* @return 當(dāng)前日期梧田,格式:yyyy-MM-dd
*/
public static String getCurDate() {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(new Date());
}
/**
* 獲取當(dāng)前時(shí)間
* @return 當(dāng)前時(shí)間蹂午,格式:yyyy-MM-dd HH:mm:ss
*/
public static String getCurTime() {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(new Date());
}
/**
* 獲取系統(tǒng)當(dāng)前默認(rèn)時(shí)區(qū)與指定時(shí)區(qū)的時(shí)間差.(單位:毫秒)
* @param timeZoneId 時(shí)區(qū)Id
* @param time 時(shí)間
* @return 系統(tǒng)當(dāng)前默認(rèn)時(shí)區(qū)與指定時(shí)區(qū)的時(shí)間差.(單位:毫秒)
*/
public static long getDiffTimeZoneRawOffset(String timeZoneId, long time) {
long diffTime = TimeZone.getDefault().getRawOffset() - TimeZone.getTimeZone(timeZoneId).getRawOffset();
long curTime = System.currentTimeMillis();
return time - curTime + diffTime;
}
/**
* 獲取當(dāng)天結(jié)束時(shí)間
* @return 毫秒數(shù)
*/
public static Long getEndTime() {
Calendar todayEnd = Calendar.getInstance();
todayEnd.set(Calendar.AM_PM, 0);
todayEnd.set(Calendar.HOUR, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTime().getTime();
}
/**
* 添加日期
* @author
* @date
* @param dateTime 時(shí)間
* @param days 天
* @return String
*/
public static String addDays(String dateTime, int days) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar date = Calendar.getInstance();
date.setTime(sdf.parse(dateTime));
date.set(Calendar.DATE, date.get(Calendar.DATE) + days);
return sdf.format(date.getTime());
}
catch (Exception e) {
return dateTime;
}
}
/**
* 添加秒
* @author
* @date
* @param dateTime 時(shí)間
* @param secondes 秒
* @return String
*/
public static String addSecondes(String dateTime, int secondes) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar date = Calendar.getInstance();
date.setTime(sdf.parse(dateTime));
date.set(Calendar.SECOND, date.get(Calendar.SECOND) + secondes);
return sdf.format(date.getTime());
}
catch (Exception e) {
return dateTime;
}
}
/**
*
* @author
* @date
* @param startTime 開始時(shí)間
* @return long
*/
public static long getDiffTimeByNow(String startTime) {
return getDiffTime(startTime, null);
}
/**
*
* @author
* @date
* @param startTime 開始時(shí)間
* @param endTime 結(jié)束時(shí)間
* @return long
*/
public static long getDiffTime(String startTime, String endTime) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = sdf.parse(startTime);
Date endDate = null;
if (StringUtil.isNotEmpty(endTime)) {
endDate = sdf.parse(endTime);
}
else {
endDate = new Date();
}
return startDate.getTime() - endDate.getTime();
}
catch (Exception e) {
return 0;
}
}
/**
* 解析時(shí)間戳
* @author
* @date
* @param time 時(shí)間
* @return String
*/
public static String timestampFormat(String time) {
String yyyy = time.substring(0, 4);
String mm = time.substring(4, 6);
String dd = time.substring(6, 8);
String hh = time.substring(8, 10);
String min = time.substring(10, 12);
String ss = time.substring(12, 14);
return yyyy + "-" + mm + "-" + dd + " " + hh + ":" + min + ":" + ss;
}
/**
*
* @author 獲得指定日期之前天數(shù)的日期
* @date
* @param d 日期
* @param day 天
* @return Date
*/
public static Date getDateDaysBefore(Date d, int day) {
Calendar now = Calendar.getInstance();
now.setTime(d);
// now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
now.add(Calendar.DATE, -day);
return now.getTime();
}
/**
* 獲取指定日期之后多少天的日期
* @author
* @date
* @param d 日期
* @param day 天
* @return Date
*/
public static Date getDateDaysAfter(Date d, int day) {
Calendar now = Calendar.getInstance();
now.setTime(d);
// now.set(Calendar.DATE, now.get(Calendar.DATE) + day);
now.add(Calendar.DATE, day);
return now.getTime();
}
/**
*
* @author 獲取指定時(shí)間窑业,之前幾個(gè)月前的時(shí)間
* @date
* @param d 日期
* @param month 月份
* @return Date
*/
public static Date getDateMonthsBefore(Date d, int month) {
Calendar now = Calendar.getInstance();
now.setTime(d);
// now.set(Calendar.DATE, now.get(Calendar.MONTH) - month);
now.add(Calendar.MONTH, -month);
return now.getTime();
}
/**
* 獲取指定時(shí)間,之后幾個(gè)月后的時(shí)間
* @author
* @date
* @param d 日期
* @param month 月份
* @return Date
*/
public static Date getDateMonthsAfter(Date d, int month) {
Calendar now = Calendar.getInstance();
now.setTime(d);
// now.set(Calendar.DATE, now.get(Calendar.MONTH) + month);
now.add(Calendar.MONTH, month);
return now.getTime();
}
}