日期工具类



import org.apache.log4j.Logger;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class TimeUtil {
private static final Logger logger = Logger.getLogger(TimeUtil.class);

/**
* 获得当前时间
*
* @return 时间格式为yyyy-MM-dd
*/
public static String getSysDate() {
return getCurrentDate(null);
}

/**
* 获得当前时间
*
* @return Date对象
*/
public static Date getSysDateAsDate() {
return Calendar.getInstance().getTime();
}

/**
* 获得当前时间
*
* @return 时间格式为HH:mm:ss
*/
public static String getSysTime() {
return getCurrentDate(GlobalConstant.TIME_FORMAT_SIX);
}

/**
* 得到固定格式的时间字符串
* 121212
*
* @return
*/
public static String getSysTime2() {
String parseStr = "HHmmss";
return getCurrentDate(parseStr);
}

/**
* 获得当前时间
*
* @return 时间格式为yyyy-MM-dd HH:mm:ss
*/
public static String getSysDateAll() {
return getCurrentDate(GlobalConstant.TIME_FORMAT_THIRTEEN);
}

/**
* 根据格式,获取当前时间
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* "2003-02-01"标示为"yyyy-MM-dd",
* 24小时:"23:12:21"-->"HH:mm:ss"
* 12小时:设为"hh:mm:ss"
* @return 当前时间字符串
*/
public static String getCurrentDate(String format) {
return formatDate(Calendar.getInstance().getTime(), format);
}

/**
* 根据格式,获取上月第一天
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 上月第一天时间字符串
*/
public static String getPreviousMonthFirst(String format) {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
lastDate.add(Calendar.MONTH, -1);//减一个月,变为上月的1号
return formatDate(lastDate.getTime(), format);
}

/**
* 根据格式,获取上月第一天
*
* @return 上月第一天时间
*/
public static Date getLastMonthFirstDay() {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
lastDate.add(Calendar.MONTH, -1);//减一个月,变为上月的1号
return lastDate.getTime();
}

/**
* 根据格式,获取当月第一天
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 当月第一天时间字符串
*/
public static String getFirstDayOfMonth(String format) {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
return formatDate(lastDate.getTime(), format);
}

/**
* 根据格式,获取下月第一天
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 下月第一天时间字符串
*/
public static String getNextMonthFirst(String format) {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
lastDate.add(Calendar.MONTH, 1);//加一个月,变为下月的1号
return formatDate(lastDate.getTime(), format);
}

/**
* 格式化时间
*
* @param date 时间对象
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 格式化后的时间
*/
public static String formatDate(Date date, String format) {
try {
if (StringUtil.isStrEmpty(format))
format = GlobalConstant.TIME_FORMAT_TEN;
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
return dateFormat.format(date);
} catch (Exception ex) {
return "";
}
}

public static String formatDateToString(String date, String format) {
if (StringUtil.isStrEmpty(format))
format = GlobalConstant.TIME_FORMAT_TEN;
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
Calendar _cal = Calendar.getInstance();
try {
return dateFormat.format(dateFormat.parse(date));
} catch (Exception ex) {
TimeUtil.logger.error("Convert String to Date Error,check String format.");
return "";
}
}

/**
* 根据格式,获取上月最后一天
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 上月最后一天时间字符串
*/
public static String getPreviousMonthLast(String format) {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
lastDate.add(Calendar.DATE, -1);//减去一天,变为当月最后一天
return formatDate(lastDate.getTime(), format);
}

/**
* 获取上个月的最后一天
*
* @param endDate 格式为"yyyy-MM-dd"
* @param format
* @return
*/
public static String getPrevioutMonthLast(String endDate, String format) {
int year = Integer.valueOf(endDate.substring(0, 4));
int month = Integer.valueOf(endDate.substring(5, 7));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
calendar.add(Calendar.DATE, -1);//减去一天,变为当月最后一天
return formatDate(calendar.getTime(), format);
}

/**
* 根据格式,获取当月最后一天
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 当月最后一天时间字符串
*/
public static String getLastDayOfMonth(String format) {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
lastDate.add(Calendar.MONTH, 1);//加一个月,变为下月的1号
lastDate.add(Calendar.DATE, -1);//减去一天,变为当月最后一天
return formatDate(lastDate.getTime(), format);
}

/**
* 根据格式,获取下月最后一天
*
* @param format 时间格式,默认为"yyyy-MM-dd"
* @return 下月最后一天时间字符串
*/
public static String getNextMonthLast(String format) {
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);//设为当前月的1号
lastDate.add(Calendar.MONTH, 2);//加2个月,变为下下月的1号
lastDate.add(Calendar.DATE, -1);//减去一天,变为当月最后一天
return formatDate(lastDate.getTime(), format);
}

/**
* 将20090321型日期转换成"yyyy-MM-dd"
*
* @param date 8位数字型日期
* @return "yyyy-MM-dd"日期
*/
public static String getSysDateInString(Long date) {
String sdate = String.valueOf(date);
StringBuffer buffer = new StringBuffer();
buffer.append(sdate.substring(0, 4)).append(GlobalConstant.RAIL).append(sdate.substring(4, 6)).append(GlobalConstant.RAIL).append(sdate.substring(6));
return buffer.toString();
}

/**
* 得到某天的前n天(n小于0),或后n天(n大于0)
*
* @param someDay
* @param n 时间间隔天数 前n天(n小于0),或后n天(n大于0)
* @return
*/
public static String getPreOrNextDay(String someDay, int n) {
Date someDate = null;
if (StringUtil.isStrEmpty(someDay)) {
someDate = Calendar.getInstance().getTime();
} else {
someDate = formatDate(someDay, null);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(someDate);
calendar.add(Calendar.DAY_OF_YEAR, n);
return getSysDate(calendar.getTime());
}

/**
* 得到某天的前n天(n小于0),或后n天(n大于0)
*
* @param date
* @param n 时间间隔天数 前n天(n小于0),或后n天(n大于0)
* @return
*/
public static Date getPreOrNextDay(Date date, int n) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, n);
return calendar.getTime();
}

/**
* 得到某天的前n天(n小于0),或后n天(n大于0)
*
* @param date
* @return
*/
public static String getWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (1 == dayOfWeek) {
return "周日";
} else if (2 == dayOfWeek) {
return "周一";
} else if (3 == dayOfWeek) {
return "周二";
} else if (4 == dayOfWeek) {
return "周三";
} else if (5 == dayOfWeek) {
return "周四";
} else if (6 == dayOfWeek) {
return "周五";
} else if (7 == dayOfWeek) {
return "周六";
} else
return "";
}

/**
* 日期的字符串形式转成Date
*
* @param date String 默认格式为yyyy-MM-dd
* @param format 格式,null则表示默认
* @return Date 日期
*/
public static Date formatDate(String date, String format) {
if (format == null)
format = GlobalConstant.TIME_FORMAT_TEN;
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
Date sysdate = null;
if (date == null) {
return null;
}
try {
sysdate = dateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return sysdate;
}

/**
* 得到当前的周数
*
* @param endDate
* @return
*/
public static int getCurrentWeek(String endDate) {
Date someDate = null;
if (StringUtil.isStrEmpty(endDate)) {
someDate = Calendar.getInstance().getTime();
} else {
someDate = formatDate(endDate, null);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(someDate);
calendar.add(Calendar.DAY_OF_YEAR, -7);
return calendar.get(Calendar.WEEK_OF_YEAR) + 1;
}

public static void main(String[] args) {
System.out.println(getCurrentWeek("2011-03-31"));
}

/**
* 给某个时间增加(减少)小时
*
* @param date
* @param hour +或-
* @return
*/
public static Date addHour(Date date, int hour) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, hour);
return calendar.getTime();
}


/**
* 根据传入的格式化参数,返回日期字符串
*
* @param date 需要格式化的日期
* @return dateStr 返回格式化的字符串日期,形式为"yyyy-MM-dd"
*/
public static String getSysDate(Date date) {
if (date == null) {
return null;
}
return formatDate(date, null);
}

/**
* 得到八位数字型的当前日期
*
* @return (Long) yyyyMMdd型当前日期
*/
public static Long getSysDateInLong() {
return Long.valueOf(getCurrentDate(GlobalConstant.TIME_FORMAT_EIGHT));
}

/**
* 格式化时间
*
* @param strDate "yyyy-MM-dd"格式的字符串
* @return 格式为"yyyyMMdd"的Long型
*/
public static Long getFormatDate(String strDate) {
if (strDate == null || strDate.equals(GlobalConstant.STR_EMPTY))
return Long.valueOf(0);
StringBuffer buffer = new StringBuffer();
buffer.append(strDate.substring(0, 4)).append(strDate.substring(5, 7)).append(strDate.substring(8, 10));
return Long.valueOf(buffer.toString());
}

/**
* 格式化yyyy-MM-dd HH:mm:ss的时间为yyyyMMdd日期
*
* @param strDate
* @return
*/
public static String getLongFormatDate(String strDate) {
StringBuffer buffer = new StringBuffer();
buffer.append(strDate.substring(0, 4)).append(strDate.substring(5, 7)).append(strDate.substring(8, 10));
return buffer.toString();
}

/**
* 得到某天天之后N天日期
*
* @param someDay yyyyMMdd数字型日期
* @param days N天
* @return yyyyMMdd数字型日期
*/
@SuppressWarnings("deprecation")
public static Long getSomeDayInLongAfterDays(Long someDay, int days) {
Date d = formatDate(String.valueOf(someDay), GlobalConstant.TIME_FORMAT_EIGHT);
d.setDate(d.getDate() + days);
return Long.valueOf(formatDate(d, GlobalConstant.TIME_FORMAT_EIGHT));
}

/**
* 得到某天之前N天日期
*
* @param someDay yyyyMMdd数字型日期
* @param days N天
* @return yyyyMMdd数字型日期
*/
@SuppressWarnings("deprecation")
public static Long getSomeDayInLongBeforeDays(Long someDay, int days) {
Date d = formatDate(String.valueOf(someDay), GlobalConstant.TIME_FORMAT_EIGHT);
d.setDate(d.getDate() - days);
return Long.valueOf(formatDate(d, GlobalConstant.TIME_FORMAT_EIGHT));
}

/**
* 得到今天之前30天日期
*
* @return 日期
*/
@SuppressWarnings("deprecation")
public static String getTheDayBeforeOneMonth() {
Long theDay = getSomeDayInLongBeforeDays(getSysDateInLong(), 30);
String date = String.valueOf(theDay);
date = date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8);
return date;
}

/**
* 得到当前天之后N天日期
*
* @param days N天
* @return yyyyMMdd数字型日期
*/
@SuppressWarnings("deprecation")
public static Long getDayInLongAfterDays(int days) {
Date d = Calendar.getInstance().getTime();
d.setDate(d.getDate() + days);
return Long.valueOf(formatDate(d, GlobalConstant.TIME_FORMAT_EIGHT));
}

/**
* 得到某天天之后N天日期和时间
*
* @param someDay yyyyMMdd数字型日期
* @param days N天
* @return 格式为yyyy-MM-dd HH:mm:ss的时间
*/
@SuppressWarnings("deprecation")
public static String getSomeDayTimeInLongAfterDays(Long someDay, int days) {
Date d = formatDate(String.valueOf(someDay), GlobalConstant.TIME_FORMAT_EIGHT);
d.setDate(d.getDate() + days);
return formatDate(d, GlobalConstant.TIME_FORMAT_THIRTEEN);
}

/**
* 得到某天之后N月日期
*
* @param someDay yyyyMMdd数字型日期
* @param monNum N月
* @return yyyyMMdd数字型日期
*/
@SuppressWarnings("deprecation")
public static Long getSomeMonthDayInLong(Long someDay, int monNum) {
Date d = formatDate(String.valueOf(someDay), GlobalConstant.TIME_FORMAT_EIGHT);
d.setMonth(d.getMonth() + monNum);
return Long.valueOf(formatDate(d, GlobalConstant.TIME_FORMAT_EIGHT));
}

/**
* 计算两个日期的天数差值(忽略时分秒)
*
* @param beginDate
* @param endDate
* @return 天数
*/
@SuppressWarnings("deprecation")
public static long getBetweenDaysFormat(Date beginDate, Date endDate) {
beginDate = DateUtil.truncate(beginDate, Calendar.DATE);
endDate = DateUtil.truncate(endDate, Calendar.DATE);
endDate.setHours(beginDate.getHours());
long beginTime = beginDate.getTime();
long endTime = endDate.getTime();
double betweenDays = (((endTime - beginTime) * 1.0) / (1000 * 60 * 60 * 24)) + 0.5;
return (long) (Math.floor(betweenDays));
}

/**
* 计算两个日期的天数差值
*
* @param beginDate
* @param endDate
* @return 天数
*/
@SuppressWarnings("deprecation")
public static long getBetweenDays(Date beginDate, Date endDate) {
endDate.setHours(beginDate.getHours());
long beginTime = beginDate.getTime();
long endTime = endDate.getTime();
double betweenDays = (((endTime - beginTime) * 1.0) / (1000 * 60 * 60 * 24)) + 0.5;
return (long) (Math.floor(betweenDays));
}

/**
* 根据传入的格式化参数,返回日期字符串
*
* @param parseFormat 要格式化成的样子 例如"2003-02-01"标示为"yyyy-MM-dd", 如果要格式为
* 24小时:"23:12:21"-->"HH:mm:ss" 12小时:设为"hh:mm:ss"
* @return dateStr 返回格式化的字符串日期
*/
public static String getSysDate(String parseFormat) {
String sysdate = "";
try {
String parseStr = parseFormat;
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(parseStr);
sysdate = dateFormat.format(date);
} catch (IllegalArgumentException illex) {
illex.printStackTrace();
sysdate = "";
} catch (NullPointerException nullex) {
nullex.printStackTrace();
sysdate = "";
}

return sysdate;

}

/**
* 得到报告期开始日期
*
* @param reportPeriod 报告期类型
* @param reportEndDate 报告截止日期 (格式为yyyyMMdd)
* @return
*/
public static String getReportBeginDate(String reportPeriod, String reportEndDate) {
String result = "";
String year = reportEndDate.substring(0, 4);
int month = Integer.valueOf(reportEndDate.substring(5, 7));
// 月报
if ("1".equals(reportPeriod)) {
result = year + "-01-01";
// 季报
} else if ("2".equals(reportPeriod)) {
result = year + "-" + String.format("%02d", month - 2) + "-01";
// 半年报
} else if ("3".equals(reportPeriod)) {
if (month == 6) {
result = year + "-01-01";
} else {
result = year + "-07-01";
}
// 年报
} else {
result = year + "-01-01";
}
return result;
}

/**
* 得到报告期名称
*
* @param reportPeriod 报告期类型
* @param reportEndDate 报告截止日期 (格式为yyyyMMdd)
* @return
*/
public static String getReportDateName(String reportPeriod, String reportEndDate) {
String result = "";
String year = reportEndDate.substring(0, 4);
int month = Integer.valueOf(reportEndDate.substring(5, 7));
// 月报
if ("1".equals(reportPeriod)) {
result = year + "年" + month + "月";
// 季报
} else if ("2".equals(reportPeriod)) {
result = year + "年" + (month / 3) + "季度";
// 半年报
} else if ("3".equals(reportPeriod)) {
if (month == 6) {
result = year + "上半年";
} else {
result = year + "下半年";
}
// 年报
} else {
result = year + "年";
}
return result;
}

/**
* 得到当前季度的开始结束时间
*
* @param flag
* @return
*/
public static String[] getReportDateList(String flag) {
if (flag == null || flag.length() < 4) {
return new String[2];
}
String[] result = new String[2];
String year;
int season;
if (flag.length() == 4) {
result[0] = flag + "-01-01";
result[1] = flag + "-12-31";
} else {
year = flag.substring(0, 4);
season = Integer.parseInt(flag.substring(4));
if (season == 1) {
result[0] = year + "-01-01";
result[1] = year + "-03-31";
}
if (season == 2) {
result[0] = year + "-04-01";
result[1] = year + "-06-30";
}
if (season == 3) {
result[0] = year + "-07-01";
result[1] = year + "-09-30";
}
if (season == 4) {
result[0] = year + "-10-01";
result[1] = year + "-12-31";
}
}
return result;
}

public static int getSysCurrYear() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR);
}

/**
* 取得日期, 整型数值yyyymmdd
*/
public static Date getDateFromYYYYMMDDInt(int d) {
GregorianCalendar cl = new GregorianCalendar();
int year = d / 10000;
int month = (d % 10000) / 100 - 1;
int day = d % 100;
cl.set(year, month, day, 0, 0, 0);
return cl.getTime();
}

/**
* 安全的转换为日期格式
*
* @param date
* @param fmt
* @return
*/
public static Date safeToDate(Object date, String fmt, Date dv) {
Date result = dv;
if (date != null) {
try {
result = new SimpleDateFormat(fmt).parse(date.toString().trim());
} catch (Exception ex) {
}
}
return result;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值