java日期时间处理工具类

package util;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 一些工具方法
 * 
 */
public class DataUtil { 
public final static SimpleDateFormat FORMAT_DATE =new SimpleDateFormat("yyyy-MM-dd");
public final static SimpleDateFormat FORMAT_DATE_TIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 获取当前时间的前一天或者前几天
* @param numbers
* @return
*/
public static String theOtherDay (int numbers,String flag){
Calendar calendar =Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的后一天或者后几天
* @param numbers
* @return
*/
public static String afterDay (int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, +numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的前一个月或者前几个月
* @param numbers
* @param flag
* @return
*/
public static String beforeMonths(int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, -numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的后一个月或者后几个月
* @param numbers
* @param flag
* @return
*/
public static String afterMonths(int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, +numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的前一周或者前几周
* @param numbers
* @param flag
* @return
*/
public static String beforeWeek(int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.WEEK_OF_YEAR, -numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的后一周或者后几周
* @param numbers
* @param flag
* @return
*/
public static String afterWeek(int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.WEEK_OF_YEAR, +numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的前一年或者前几年
* @param numbers
* @param flag
* @return
*/
public static String beforeYear(int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.YEAR, -numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
}
/**
* 获取当前时间的后一年或者后几年
* @param numbers
* @param flag
* @return
*/
public static String afterYear(int numbers,String flag){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.YEAR, +numbers);
return FORMAT_DATE_TIME.format(calendar.getTime());
} 
/**
* 字符串日期格式转换
* @param strIn
* @param strFrmOrg
* @param strFrmNew
* @return
*/
public static String dateFormatTrans(String strIn, String strFrmOrg, String strFrmNew){
if (strIn == null || strIn.trim().equals("")) {
return "";
}
String strRes = "";
long lUtc = DateToUTC(strIn, strFrmOrg);
strRes = DataUtil.UTCToDate(lUtc, strFrmNew);

return strRes;
}


/**
* 获取今日UTC起始值
* @return
*/
public static String getTodayZero() {
long lRes = 0l;
Date date = new Date();
String strDate = new SimpleDateFormat("yyyy-MM-dd").format(date);


strDate += " 00:00:00";


lRes = DataUtil.DateToUTC(strDate, "yyyy-MM-dd HH:mm:ss");
return lRes + "";
}
/**
* 今日结束值
* @return
*/
public static String getTodayEnd() {
long lRes = 0l;
Date date = new Date();
String strDate = new SimpleDateFormat("yyyy-MM-dd").format(date);
strDate += " 23:59:59";
lRes = DataUtil.DateToUTC(strDate, "yyyy-MM-dd HH:mm:ss");
return lRes + "";
}


/**
* 时间字符串转换为UTC
* @param date
* @param format
* @return
*/
public static long DateToUTC(String date, String format) {
if (date == null || date.equals("")) {
return 0;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
long utc = 0;
try {
utc = sdf.parse(date).getTime() / 1000;
} catch (java.text.ParseException e) {
}
return utc;
}


/**
* UTC时间字符串转为format格式
*/
public static String UTCToDate(long utc, String format) {
if (utc == 0) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = new Date(utc * 1000);
return sdf.format(d);
}

/**
* 获取当前的UTC时间
*/
public static Long getUtcNow(){
Date dateNow = new Date();
Long lRes = dateNow.getTime() / 1000;
return lRes;
}

/**
* 获取指定周的utc时间
*/
public static Long getWeekSt(int year,int week){
Calendar cal = Calendar.getInstance();  
        //设置年份  
        cal.set(Calendar.YEAR,year);  
        //设置周  
        cal.set(Calendar.WEEK_OF_YEAR, week + 1);  
        //设置该周第一天为星期一  
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);  
        //格式化日期  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
        String strRes = sdf.format(cal.getTime());  

return DateToUTC(strRes, "yyyy-MM-dd");
}
public static Long getWeekEd(int year,int week){
Calendar cal = Calendar.getInstance();  
        //设置年份  
        cal.set(Calendar.YEAR,year);  
        //设置周  
        cal.set(Calendar.WEEK_OF_YEAR, week);  
        //设置该周第一天为星期一  
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);  
        //格式化日期  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
        String strRes = sdf.format(cal.getTime());  

return DateToUTC(strRes, "yyyy-MM-dd");
}
/**
* 获取当前时间的前几天的开始时间
* @param iDayNum
* @return
*/
public static long getUtcBeforDayStart(Integer iDayNum){
Calendar dt30Ago = Calendar.getInstance();
dt30Ago.setTime(new Date());
dt30Ago.add(Calendar.DATE, -1*iDayNum);
String strDate = new SimpleDateFormat("yyyy-MM-dd").format(dt30Ago.getTime());
return DataUtil.DateToUTC(strDate + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
}
/**
* 获取当前时间的前几天的结束时间
* @param iDayNum
* @return
*/
public static long getUtcBeforDayEnd(Integer iDayNum){
Calendar dt30Ago = Calendar.getInstance();
dt30Ago.setTime(new Date());
dt30Ago.add(Calendar.DATE, -1*iDayNum);
String strDate = new SimpleDateFormat("yyyy-MM-dd").format(dt30Ago.getTime());

return DataUtil.DateToUTC(strDate + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
}
/**
* 时间点转成long
* 
* @param timePoint
*            格式HH:mm:ss
* @return long
*/
public static long timePointToLong(String timePoint) {
if (timePoint == null || timePoint.equals("")) {
return -1;
}
long utc = -1;
try {
String[] hm = timePoint.split(":");
int h = Integer.parseInt(hm[0]);
int m = Integer.parseInt(hm[1]);
int s = Integer.parseInt(hm[2]);
utc = h * 60 * 60 + m * 60 + s;
} catch (NumberFormatException e) {
e.printStackTrace();
}
return utc;
}
/**
* 时间点转成long:精确到分钟
* @param timePoint 格式HH:mm:ss
* @return long
*/
public static long timePointToHMLong(String timePoint) {
if (timePoint == null || timePoint.equals("")) {
return -1;
}
long utc = -1;
try {
String[] hm = timePoint.split(":");
int h = Integer.parseInt(hm[0]);
int m = Integer.parseInt(hm[1]);
int s = Integer.parseInt(hm[2]);
utc = h * 60  + m ;
} catch (NumberFormatException e) {


}
return utc;
}


/**
* 时间点转成long
* 
* @param timePoint
*            格式HH:mm
* @return long
*/
public static long HMPointToLong(String timePoint) {
if (timePoint == null || timePoint.equals("")) {
return -1;
}
long utc = -1;
try {
String[] hm = timePoint.split(":");
int h = Integer.parseInt(hm[0]);
int m = Integer.parseInt(hm[1]);
utc = h * 60 * 60 + m * 60;
} catch (NumberFormatException e) {
// e.printStackTrace();
}
return utc;
}


/**
* 时间点转成long
* 
* @param timePoint
*            格式HH
* @return long
*/
public static long HoursPointToLong(String timePoint) {
if (timePoint == null || timePoint.equals("")) {
return -1;
}
long utc = -1;
try {
utc = Integer.parseInt(timePoint) * 60 * 60;
} catch (NumberFormatException e) {


}
return utc;
}


/**
* long转成时间点
* 
* @param utc
*            long
* @return 格式HH:mm:ss
*/
public static String longToTimePoint(long utc) {
StringBuilder timePoint = new StringBuilder();
try {
long h = utc / 3600;
long mod = utc % 3600;
long m = mod / 60;
long s = (utc % 3600) % 60;
if (h == 0) {
timePoint.append("00");
} else if (h > 0 && h < 10) {
timePoint.append("0").append(h);
} else {
timePoint.append(h);
}
timePoint.append(":");
if (m == 0) {
timePoint.append("00");
} else if (m > 0 && m < 10) {
timePoint.append("0").append(m);
} else {
timePoint.append(m);
}
timePoint.append(":");
if (s == 0) {
timePoint.append("00");
} else if (s > 0 && s < 10) {
timePoint.append("0").append(s);
} else {
timePoint.append(s);
}
} catch (Exception e) {


}
return timePoint.toString();
}


/**
* long转成时间点
* 
* @param utc
*            long
* @return 格式HH:mm
*/
public static String longToHM(long utc) {


StringBuilder timePoint = new StringBuilder();


try {


long h = utc / 3600;
long mod = utc % 3600;
long m = mod / 60;


if (h == 0) {
timePoint.append("00");
} else if (h > 0 && h < 10) {
timePoint.append("0").append(h);
} else {
timePoint.append(h);
}


timePoint.append(":");


if (m == 0) {
timePoint.append("00");
} else if (m > 0 && m < 10) {
timePoint.append("0").append(m);
} else {
timePoint.append(m);
}
} catch (Exception e) {
// e.printStackTrace();
}
return timePoint.toString();
}
/**
* 分钟数转成时间点:秒默认00
* 
* @param utc
*            long
* @return 格式HH:mm:ss
*/
public static String HMlongToTime(long utc) {


StringBuilder timePoint = new StringBuilder();


try {


long h = utc / 60;
long m = utc % 60;


if (h == 0) {
timePoint.append("00");
} else if (h > 0 && h < 10) {
timePoint.append("0").append(h);
} else {
timePoint.append(h);
}


timePoint.append(":");


if (m == 0) {
timePoint.append("00");
} else if (m > 0 && m < 10) {
timePoint.append("0").append(m);
} else {
timePoint.append(m);
}
timePoint.append(":");
timePoint.append("00");
} catch (Exception e) {
// e.printStackTrace();
}
return timePoint.toString();
}
/**
* long转成时间点
* 
* @param utc
*            long
* @return 格式HH
*/
public static String longToHours(long utc) {
StringBuilder timePoint = new StringBuilder();
try {
long h = utc / 3600;


if (h == 0) {
timePoint.append("00");
} else if (h > 0 && h < 10) {
timePoint.append("0").append(h);
} else {
timePoint.append(h);
}
} catch (Exception e) {


}
return timePoint.toString();
}


/**
* @param date
*            格式 2009-07-02 返回090902
* @return
* @throws Exception
*/
public static String subDate(String date) throws Exception {
String reStr = "";
String[] array = date.split("-");
reStr += array[0].substring(2);
reStr += array[1];
reStr += array[2];


return reStr;
}


/**
* @param time
*            格式 09:09:00 返回090900
* @return
* @throws Exception
*/
public static String subTimeHMS(String time) throws Exception {
String reStr = "";
String[] array = time.split(":");
reStr += array[0];
reStr += array[1];
reStr += array[2];


return reStr;
}


/**
* @param time
*            格式 09:09:00 返回090900
* @return
* @throws Exception
*/
public static String subTimeHM(String time) throws Exception {
String reStr = "";
String[] array = time.split(":");
reStr += array[0];
reStr += array[1];


return reStr;
}


public static String subTimeYMDHMS(String time) throws Exception {
String reStr = "";
String[] aray = time.split(" ");
reStr += DataUtil.subDate(aray[0]);
reStr += DataUtil.subTimeHMS(aray[1]);


return reStr;


}


public static String YMDHMStosubTime(String time) throws Exception {
if (time != null && time.length() == 12) {
String date = time.substring(0, 6);
String t = time.substring(6);


String year = "20" + date.substring(0, 2);
String mon = date.substring(2, 4);
String d = date.substring(4, 6);


String h = t.substring(0, 2);
String m = t.substring(2, 4);
String s = t.substring(4, 6);


return year + "-" + mon + "-" + d + " " + h + ":" + m + ":" + s;
}
return "";


}
public static String YMDtosubDate(String time) {
if (time != null && time.length() == 8) {
String date = time.substring(0, 8);


String year = date.substring(0, 4);
String mon = date.substring(4, 6);
String d = date.substring(6, 8);


return year + "-" + mon + "-" + d;
}
return "";


}
/**
* 转换时分秒
*/
public String getTimeToDate(String value) {


if (value.equals("")) {
return "";
}
String rv = "";
int c_time = Integer.parseInt(value);
int t_hours = 60 * 60 * 24;
if (c_time > t_hours) {
// 天
int v_day = c_time / t_hours;
rv = v_day + "天 " + dayToDate(c_time % t_hours);
} else if (c_time == t_hours) {
// 整1小时
rv = "1天0小时0分0秒";
} else {
rv = dayToDate(c_time);
}
return rv;
}


public String dayToDate(int value) {
String v_time = null;
int t_hours = 60 * 60 * 24, t_min = 60 * 60, t_sec = 60;
int c_time = value;
if (c_time < t_sec) {
// 秒
v_time = c_time + "秒";
} else if (c_time == t_sec) {
// 整1分钟
v_time = "1分0秒";
} else if (c_time > t_sec && c_time < t_min) {
// 分钟
int v_min = c_time / t_sec;
int v_sec = c_time % t_sec;
v_time = v_min + "分" + v_sec + "秒";
} else if (c_time == t_min) {
// 整1小时
v_time = "1小时0分0秒";
} else if (c_time > t_min && c_time < t_hours) {
// 小时
int v_hours = c_time / t_min;
int v_min = (c_time - v_hours * 3600) / t_sec;
int v_sec = (c_time - v_hours * 3600) % t_sec;
v_time = v_hours + "小时" + v_min + "分" + v_sec + "秒";
}
return v_time;
}
/**
* 日期转化日期字符串
* @param format 格式
* @param date 日期
* @return
*/
public static String date2Str(String format, Date date){
String dateStr = null;
SimpleDateFormat sdf = new SimpleDateFormat(format, java.util.Locale.CHINESE);
dateStr = sdf.format(date);


return dateStr;
}

/**
* 获取当前年份的列表,从今年开始算起
* @param iNum
* @return
*/
public static List<String> getCurYearList(int iNum) {
List<String> lsRes = new ArrayList<String>();
if (iNum < 1) {
iNum = 1;
}

String strYearNow = date2Str("yyyy", new Date());
Integer iYearNow = Integer.parseInt(strYearNow);
for (int i = 0; i < iNum; i++) {
String strTmp = "" + (iYearNow - i);
lsRes.add(strTmp);
}

return lsRes;
}

/**
* 获取当前时间所处今年第几周
* @return
*/
public static Integer getWeekNum() {
Integer iNum = 0;
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.set(Calendar.DAY_OF_MONTH,c.get(Calendar.DAY_OF_MONTH)-7);
iNum = c.get(Calendar.WEEK_OF_YEAR);
return iNum;
}



/** 计算耗时及单位
* 转化毫秒 */
public static String getTimeBysed(long x) {
String time = "";
if (x < 1000) {
time = x + "ms";
} else if (x >= 1000 && x < 60000) {
time = Math.round((x / 1000D) * 10) / 10D + "s";
} else if (x >= 60000 && x < 3600000) {
time = Math.round((x / 1000D / 60D) * 10) / 10D + "m";
} else {
time = Math.round((x / 1000D / 60D / 60D) * 10) / 10D + "h";
}
return time;
}
}

猜你喜欢

转载自blog.csdn.net/wzm1994/article/details/78522141