時間工具類java
阿新 • • 發佈:2019-01-23
時間工具類
package com.newyulong.bcp.utils; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import org.apache.commons.lang.StringUtils; public class DateUtil { /** * 日期格式化字串->全數字表示 yyyyMMddHHmmss */ public static final String TIME_FORMAT_DIGITAL = "yyyyMMddHHmmss"; /** * 日期格式化字串->全數字表示 yyyyMMdd */ public static final String TIME_FORMAT_DAY_1 = "yyyyMMdd"; /** * 日期格式化字串-> HH:mm */ public static final String TIME_FORMAT_HOUR = "yyyyMMddHHmmss"; /** * 日期格式化字串 到秒 yyyy-MM-dd HH:mm:ss */ public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** * 日期格式化字串 到天 yyyy-MM-dd */ public static final String TIME_FORMAT_DAY = "yyyy-MM-dd"; /** * 日期格式化字串 到毫秒 yyyy-MM-dd HH:mm:ss.SSS */ public static final String TIME_FORMAT_MSEL = "yyyy-MM-dd HH:mm:ss.SSS"; /** * oracle中日期格式化字串 yyyy-mm-dd hh24:mi:ss */ public static final String TIME_FORMAT_ORACLE = "yyyy-mm-dd hh24:mi:ss"; /** * oracle中日期格式化字串 HH:mm */ public static final String TIME_FORMAT_HHMM = "HH:mm"; /** * oracle中日期格式化字串 HH:mm */ public static final String TIME_FORMAT_HOUR_ONLY = "yyyy-MM-dd HH"; /** * 日期格式化字串 到月 yyyy-MM */ public static final String TIME_FORMAT_MONTH = "yyyy-MM"; public static final String TIME_FORMAT_MONTH_MM_DD = "yyyy/MM/dd"; /** * 返回系統時間 * * @return long * @author:lipeng * @date:2012-12-6 */ public static long getcurrentTime(){ return System.currentTimeMillis(); } /** * 獲取伺服器當前日期 * @return */ public static Date getCurrentDate() { return new Date(System.currentTimeMillis()); } /** * 獲取伺服器當前時間的字串 ,格式 :yyyy-MM-dd HH:mm:ss * @return */ public static String getCurrentDateStr(){ return convertDateToStr(getCurrentDate(), TIME_FORMAT); } /** * 獲取當前時間到指定hour時間的字串 * @param hour 指定hour,-1指前一小時,+1指後一小時 * @return String * @author:lipeng * @date:2013-3-7 */ public static String getCurrentToHour(int hour,String format){ Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.HOUR, hour); // 得到提前hour小時 Date oneHourBefore = calendar.getTime(); return convertDateToStr(oneHourBefore,format); } /** * 得到當天的23:59:59秒的指定格式的字串值 * * @param format * @return String * @author:lipeng * @date:2013-1-16 */ public static String getCurrentLastesStr(String format){ Calendar cal = Calendar.getInstance(); cal.setTime(getCurrentDate()); SimpleDateFormat sdf = new SimpleDateFormat(format); convertDateToStr(getCurrentDate(), format); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return sdf.format(cal.getTime()); } /** * 獲取指定日期的23:59:59秒的指定格式的date * * @param date * @param format * @return String * @author:lipeng * @date:2013-1-16 */ public static Date getCurrentLastesStr(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); } /** * 獲取指定天數的2013-01-01 23:59:59秒的指定格式的date */ public static String getLastesDayStr(int date){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, date); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); // 獲取昨天的時間 return convertDateToStr(cal.getTime(),TIME_FORMAT); } /** * 獲取當天的零點的日期,00:00:01 * * @return Date * @author:lipeng * @date:2013-1-16 */ public static String getCurrentFirstStr(String format){ SimpleDateFormat sdf = new SimpleDateFormat(format); Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 1); cal.add(Calendar.DAY_OF_MONTH, 0); return sdf.format(cal.getTime()); } /** * 獲取伺服器當前時間的字串 ,格式:指定 * * @param format * @return String * @author:lipeng * @date:2013-1-6 */ public static String getCurrentDateStr(String format){ return convertDateToStr(getCurrentDate(), format); } /** * 增加天數 * @param date * @param days * @return */ public static Date addDate(Date date, int days) { if (date == null) return date; Locale loc = Locale.getDefault(); GregorianCalendar cal = new GregorianCalendar(loc); cal.setTime(date); int day = cal.get(Calendar.DAY_OF_MONTH); int month = cal.get(Calendar.MONTH); int year = cal.get(Calendar.YEAR); cal.set(year, month, day + days); return cal.getTime(); } /** * 增加天/小時/分鐘/秒 * * @param date 時間 * @param days 天 * @param hours 小時 * @param mins 分鐘 * @param second 秒 * @return Date * @author:lipeng * @date:Dec 26, 2013 */ public static Date addDate(Date date, int days,int hours,int mins,int second) { if (date == null) return date; Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, days); cal.add(Calendar.HOUR, hours); cal.add(Calendar.MINUTE, mins); cal.add(Calendar.SECOND, second); return cal.getTime(); } /** * 增加天/小時/分鐘/秒 * * @param date 時間 * @param days 天 * @param hours 小時 * @param mins 分鐘 * @param second 秒 * @return Date * @author:lipeng * @date:Dec 26, 2013 */ public static Date addDate(String date, int days,int hours,int mins,int second) { if(StringUtils.isBlank(date)){ throw new IllegalArgumentException("DateUtil.addDate()方法非法引數值:" + date); } Calendar cal = Calendar.getInstance(); cal.setTime(convertStrToDate(date,TIME_FORMAT)); cal.add(Calendar.DAY_OF_MONTH, days); cal.add(Calendar.HOUR, hours); cal.add(Calendar.MINUTE, mins); cal.add(Calendar.SECOND, second); return cal.getTime(); } /** * 獲取前幾天或後幾天的日期 * * @param days * @return Date * @author:lipeng * @date:2013-1-16 */ public static Date addDate(int days){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, days); return cal.getTime(); } /** * 獲取前一天所處的周的星期一 * * @return Date 幾天前或後的時間 * @author:lipeng * @date:2013-3-12 */ public static Date getWeekStar(int day){ Calendar cal = new GregorianCalendar(); cal.add(Calendar.DAY_OF_WEEK, day); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return cal.getTime(); } /** * 獲取前一天所處的周的星期天 * * @param day 幾天前或後的時間 * @return Date * @author:lipeng * @date:2013-3-12 */ public static Date getWeekEnd(int day){ Calendar cal = new GregorianCalendar(); cal.add(Calendar.DAY_OF_WEEK, day); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return cal.getTime(); } /** * 獲取指定日期所處的周的星期一 * * @return Date * @author:lipeng * @date:2013-3-12 */ public static Date getWeekStar(int year,int month,int date){ Calendar cal = new GregorianCalendar(); cal.set(year, month, date); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return cal.getTime(); } /** * 獲取指定日期所處的周的星期天 * * @param day * @return Date * @author:lipeng * @date:2013-3-12 */ public static Date getWeekEnd(int year,int month,int date){ Calendar cal = new GregorianCalendar(); cal.set(year, month, date); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return cal.getTime(); } /** * 獲取前一天所處的月頭 * * @param day * @return Date * @author:lipeng * @date:2013-3-12 */ public static Date getMonthStar(int month){ Calendar cal = new GregorianCalendar(); cal.add(Calendar.MONTH, month); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); } /** * 獲取前一天所處的月尾 * * @param day * @return Date * @author:lipeng * @date:2013-3-12 */ public static Date getMonthEnd(int month){ Calendar cal = new GregorianCalendar(); cal.add(Calendar.MONTH, 1 + month); cal.set(Calendar.DAY_OF_MONTH, 0); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); } /** * 將字串轉換為日期格式 * @param dateStr * @param dateFormat * @return */ public static Date convertStrToDate(String dateStr, String dateFormat) { if (dateStr == null || dateStr.equals("")) { return null; } SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); try { return sdf.parse(dateStr); } catch (Exception e) { throw new RuntimeException("DateUtil.convertStrToDate():" + e.getMessage()); } } /** * 將日期轉換為字串格式 * @param date * @param dateFormat * @return */ public static String convertDateToStr(Date date, String dateFormat) { if (date == null) { return null; } SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); return sdf.format(date); } /** * 給一日期增加一時間 * @param timePart HH,mm,ss * @param number 要增加的時間 * @param date 日期物件 * @return */ public static Date addTime(String timePart, int number, Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); if (timePart.equals("HH")) { cal.add(Calendar.HOUR, number); } else if (timePart.equals("mm")) { cal.add(Calendar.MINUTE, number); } else if (timePart.equals("ss")) { cal.add(Calendar.SECOND, number); } else { throw new IllegalArgumentException("DateUtil.addDate()方法非法引數值:" + timePart); } return cal.getTime(); } /** * * 清除指定的時間 * @param date * @param timePart HH,mm,ss * @return */ public static Date clearTime(Date date,String timePart){ Calendar cal = Calendar.getInstance(); cal.setTime(date); if (timePart.equals("HH")) { cal.clear(Calendar.HOUR); } else if (timePart.equals("mm")) { cal.clear(Calendar.MINUTE); } else if (timePart.equals("ss")) { cal.clear(Calendar.SECOND); } else { throw new IllegalArgumentException("DateUtil.addDate()方法非法引數值:" + timePart); } return cal.getTime(); } /** * 計算間隔時間 * * @param currTime * @param lastestTime * @return String * @author:lipeng * @date:2013-4-27 */ public static String getTimeSpace(String currTime,String lastestTime){ Long d = convertStrToDate(currTime, TIME_FORMAT).getTime(); Long d2 = convertStrToDate(lastestTime, TIME_FORMAT).getTime(); return String.valueOf((d - d2)/1000); } /** * 比較時間大小 * * @param a 時間字串 * @param b 時間字串 * @param timeFormat 時間字串格式 * @return int a > b 返回'-1',a = b 返回'0',a < b返回'1' * @author:lipeng * @date:Mar 27, 2014 */ public static int compareTo(String a,String b,String timeFormat){ long c = DateUtil.convertStrToDate(a, timeFormat).getTime(); long d = DateUtil.convertStrToDate(b, timeFormat).getTime(); if(c > d){ return -1; }else if(c == d){ return 0; }else{ return 1; } } /** * 計算當前月的第一天 * * @return String * @author: * @date:2013-4-27 */ public static String getBeginTime() { SimpleDateFormat datef=new SimpleDateFormat(TIME_FORMAT); Calendar cal = Calendar.getInstance(); //當前月的第一天 cal.set(GregorianCalendar.DAY_OF_MONTH, 1); Date beginTime=cal.getTime(); return datef.format(beginTime); } /** * 計算當前月的最後一天 * * @return String * @author: * @date:2013-4-27 */ public static String getEndTime() { Calendar cal = Calendar.getInstance(); SimpleDateFormat datef=new SimpleDateFormat(TIME_FORMAT); //當前月的最後一天 cal.set( Calendar.DATE, 1 ); cal.roll(Calendar.DATE, - 1 ); Date endTime=cal.getTime(); return datef.format(endTime); } /** * 計算某年某月的最後一天 * * @return String * @author: * @date:2013-4-27 */ public static String getLastDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE)); return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime()); } /** * 計算某年某月的第一天 * * @return String * @author: * @date:2013-4-27 */ public static String getFirstDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime()); } /** * 判斷輸入是否為合法的日期格式 * * @return String * @author: * @date:2013-4-27 */ public static boolean isDate(String str, String dateFormat) { if (str != null) { java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(dateFormat); formatter.setLenient(false); try { formatter.format(formatter.parse(str)); }catch (Exception e) { return false; } return true; } return false; } /** * 獲取百度網站的北京時間 * * @return * @author:Administrator * @date:2014年7月8日 */ public static long getTime() { long time = 0; String urls = "http://open.baidu.com/special/time/"; try { URL url = new URL(urls); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.connect(); InputStream is = con.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; int index = 0; while ((line = br.readLine()) != null) { index++; if (index < 123) continue; if (line.indexOf("window.baidu_time(") != -1) { String[] s = line.split("\\("); time = Long.parseLong(s[1].substring(0, s[1].length() - 2)); break; } } con.disconnect(); } catch (Exception e) { e.printStackTrace(); } return time; } /** * 獲取某一日期前幾月和後幾月 * * @param date * @param amount * @return * @author:zhengjk * @date:2014-12-4 */ public static Date addMonth(Date date, int amount){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MONTH, amount); return c.getTime(); } public static String getCurrentMouth() { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH,1);//設定為1號,當前日期既為本月第一天 String date = format.format(c.getTime()); return date; } /** * 獲取某一日期前幾月和後幾月 * * @param date * @param amount * @return * @author:lipeng * @date:2015年1月26日 */ public static String cutMonth(Date date, int amount,String dateFormat){ return convertDateToStr(addMonth(date, amount),dateFormat); } public static String timeStamp2Date(String timestampString, String formats){ Long timestamp = Long.parseLong(timestampString)*1000; String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp)); return date; } public static void main(String[] args){ // //上週一 Wed Jul 29 2015 15:25:23 GMT 0800 // System.out.println(DateUtil.convertDateToStr(getWeekStar(-3), TIME_FORMAT)); // //上週日 // System.out.println(DateUtil.convertDateToStr(getWeekEnd(-3), TIME_FORMAT)); // // 3.當前月的第一天 // System.out.println("當前月的第一天:" + convertDateToStr(getMonthStar(35),TIME_FORMAT)); // // 4.當前月的最後一天 // System.out.println("當前月的最後一天:" + convertDateToStr(getMonthEnd(35),TIME_FORMAT)); // System.out.println("獲取前2天的時間:" + getLastesDayStr(-2)); // System.out.println(24*60*60*1000); // System.out.println(convertDateToStr(new Date(1437619600), TIME_FORMAT)); // System.out.println(convertDateToStr(new Date(1437724064), TIME_FORMAT)); System.out.println(timeStamp2Date("1437558729",TIME_FORMAT)); /* Date d = convertStrToDate("2013-04-17 00:00:01", TIME_FORMAT); System.out.println(d.getTime()); Date d2 = convertStrToDate("Wed Jul 29 2015 15:25:23 GMT+08:00", TIME_FORMAT); System.out.println(d2.getTime());*/ // System.out.println(d.getTime()); // List<String> list = new ArrayList(); // for (int i = 1; i < 5000; i++) { // list.add(convertDateToStr(new Date(1366190471000L - i*38*1000), TIME_FORMAT)); // } // for (int i = 1; i < 8; i++) { // Date d = convertStrToDate("2013-06-" + i, TIME_FORMAT_DAY); // System.out.println((d.getTime() )); // } // System.out.println(getcurrentTime()); // String time = DateUtil.convertDateToStr(DateUtil.addDate(-2),DateUtil.TIME_FORMAT_DAY); // System.out.println(time); // System.out.println(convertDateToStr(getWeekStar(2013,4,3),TIME_FORMAT_DAY)); // System.out.println(convertDateToStr(getWeekEnd(2013,5,3),TIME_FORMAT_DAY)); // System.out.println(convertDateToStr(getMonthStar(0),TIME_FORMAT_DAY)); // System.out.println(getTimeSpace("2014-03-05 12:05:00","2014-03-05 12:01:00")); // System.out.println(getCurrentLastesStr(DateUtil.TIME_FORMAT)); // System.out.println(convertDateToStr(new Date(1404787254578L),TIME_FORMAT)); // System.out.println(convertDateToStr(addMonth(new Date(),2), "yyyyMM")); // System.out.println(convertDateToStr(addMonth(new Date(), -5),TIME_FORMAT_MONTH)); // System.out.println(cutMonth(convertStrToDate("2015-03-18 16:56:00", DateUtil.TIME_FORMAT), -6,DateUtil.TIME_FORMAT)); } }