import java.sql.Timestamp; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.TimeZone; public class DateUtil { /** * @desc 取當前時間 * @param modle:yyyyMM;yyyyMMdd;yyyy-MM-dd HH:mm:ss;"yyyy-MM-dd HH:mm:ss,SSS" * @return date */ public static String getCurrentDate(String model) { String date = ""; try { Date dt = new Date(); SimpleDateFormat formatter = new SimpleDateFormat(model); formatter.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); date = formatter.format(dt); } catch (Exception ex) { date = ""; } return date; } /** *@ title:格式化時間爲字符串 *@ Description: 格式化時間爲字符串 *@ param: date 日期,formatter 格式化 *@ return String *@ throw Exception *@ author:王宇雷 *@ date:2016-1-10 *@ modify Description 修改內容描述 *@ modify man:修改人 *@ modify date:修改時間(yyyy-MM-dd) */ public static String getDateToString(Date date,String formatter) { try { SimpleDateFormat format = new SimpleDateFormat(formatter); format.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); return format.format(date); } catch (Exception ex) { LogUtil.error(ex); } return null; } /** * @title getDateOfMonthNums:獲取指定日期,在指定的月數以前的日期. <br/> * @Description:描述 * @param: param * @return: * @throw: * @author:wangyl * @date:2016-2-23下午4:00:13 * @modify Description: 修改內容描述 * @modify man:修改人 * @modify date:修改時間(yyyy-MM-dd) */ public static String getBeforeDateOfMonthNums(Date date, String formatter,int months) { try { // 以前日期 Date beforeDate = null; // 獲得日曆 Calendar calendar = Calendar.getInstance(); // 把date時間賦給日曆 calendar.setTime(date); // 設置爲前3月 calendar.add(calendar.MONTH, -months); // 獲得前3月的時間 beforeDate = calendar.getTime(); //格式化 SimpleDateFormat sdf=new SimpleDateFormat(formatter); //返回格式化前3月的時間 return sdf.format(beforeDate); } catch (Exception ex) { LogUtil.error(ex); } return null; } /** *@ title:格式化字符串爲時間 *@ Description: 格式化字符串爲時間 *@ param: date 日期,model 格式:yyyy/MM/dd等 *@ return java.sql.Date *@ throw Exception *@ author:wanghr *@ date:2016-4-15 *@ modify Description 修改內容描述 *@ modify man:修改人 *@ modify date:修改時間(yyyy-MM-dd) */ public static java.sql.Date getDateFromString(String date,String model){ long long_date = 0; java.sql.Date sql_date = null; try { long_date = new SimpleDateFormat(model).parse(date).getTime(); sql_date = new java.sql.Date(long_date); return sql_date; } catch (ParseException e) { LogUtil.error(e); } return null; } /** *@ title:獲取當前月的初一時間 *@ Description: 獲取當前月的初一時間 *@ param: *@ return *@ throw Exception: *@ author:wanghr *@ date:2016-4-25 *@ modify Description 修改內容描述 *@ modify man:修改人 *@ modify date:修改時間(yyyy-MM-dd) */ public static String getMonthEarly(){ String array[] = DateUtil.getCurrentDate("yyyy-MM-dd").split("-"); String monthEarly = array[0]+"-"+array[1]+"-"+"01"; return monthEarly; } /** * * <p>獲取指定日期的最大日期<p> * @param dateStr * @param formatter * @return * @author */ public static Date getMaxDateOfMonth(String dateStr,String formatter) { SimpleDateFormat sdf = new SimpleDateFormat(formatter); try { Date date = sdf.parse(dateStr); Calendar c = Calendar.getInstance(); if (date != null) { c.setTime(date); } else { c.setTime(new Date()); } //獲取年 int year = c.get(Calendar.YEAR); // 獲取月 int month = c.get(Calendar.MONTH) + 1; // 返回天數 int days = getDays(year,month); Calendar newC = Calendar.getInstance(); newC.set(year, month - 1, days); return newC.getTime(); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 是否閏年 * * @param year * @return */ public static boolean isLeap(int year) { return (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)); } /** * 返回一個月的天數 * * @param year * @param month * @return */ public static int getDays(int year, int month) { return (month == 2) ? (isLeap(year) ? 29 : 28) : ((((month < 7) && (month % 2 == 0)) || ((month > 8) && (month % 2 == 1))) ? 30 : 31); } /** * 獲取當前日期的前或者後的日期 * @param flag * @return * 若是flag= -1 表示前一天,flag = 1表示後一天 ,flag= 0表示的是當天 */ public static String getYesterday(int flag){ String str = ""; try { Calendar calendar = Calendar.getInstance(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); //calendar.setTime(df.parse(date)); calendar.add(Calendar.DATE, flag); str = df.format(calendar.getTime()); System.out.println(calendar); } catch (Exception e) { e.printStackTrace(); } System.out.println(str); return str; } public static String getfirstDayMonth(){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //獲取前月的第一天 Calendar cale = null; cale = Calendar.getInstance(); //獲取當前日期 cale.add(Calendar.MONTH, 0); cale.set(Calendar.DAY_OF_MONTH, 1); //設置爲1號,當前日期既爲本月第一天 String firstDay = format.format(cale.getTime()); return firstDay; } public static String getlastDayMonth(){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //獲取前月的最後 Calendar cale = null; cale = Calendar.getInstance(); //獲取當前日期 cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 1); cale.set(Calendar.DAY_OF_MONTH, 0); String lastDay = format.format(cale.getTime()); return lastDay; } /** * 根據給的月份(2016-08)獲取第一個月 * @param month * @return */ public static String getFirstMonth(String month) { if(StringUtil.isEmpty(month)) { return getCurrentDate("yyyy") + "-01"; } else { return month.substring(0, 4) + "-01"; } } public static String getCurrentDate(String model,int flag){ String str = ""; try { Calendar calendar = Calendar.getInstance(); SimpleDateFormat df = new SimpleDateFormat(model); df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); //calendar.setTime(df.parse(date)); calendar.add(Calendar.DATE, flag); str = df.format(calendar.getTime()); } catch (Exception e) { e.printStackTrace(); } return str; } //判斷當前日期是否在指定時間以前 public static boolean before(String time){ boolean retValue=false; Timestamp x = Timestamp.valueOf(DateUtil.getCurrentDate("yyyy-MM-dd",0)+" "+time); retValue = new Timestamp(System.currentTimeMillis()).before(x); return retValue; } //判斷當前日期是否在指定時間以後 public static boolean after(String time){ boolean retValue=false; Timestamp x = Timestamp.valueOf(DateUtil.getCurrentDate("yyyy-MM-dd",0)+" "+time); retValue = new Timestamp(System.currentTimeMillis()).after(x); return retValue; } //計算兩個日期之間相差月份 public static int diffMonthdates(String startDate, String endDate, String model) { int result = 0; try{ SimpleDateFormat df=new SimpleDateFormat(model); Date d0=df.parse(startDate); Date d1=df.parse(endDate); result = (d1.getYear() - d0.getYear()) * 12 + d1.getMonth() - d0.getMonth(); }catch(Exception ex){ ex.printStackTrace(); } return result; } /** * 根據傳入時間字符串得到須要格式的三種加減時間串 * @param strDate 時間字符串 * @param model 格式 * @param temp 加減項 * @param i 加減量 * @return */ public static String getDateByStrNum(String strDate,String model,int temp,int i) { SimpleDateFormat formatter = new SimpleDateFormat(model); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); Calendar cal = Calendar.getInstance(); cal.setTime(strtodate); cal.add(temp, i); return formatter.format(cal.getTime()); } /** * 得到兩個日期之間的全部月份 * @param minDate * @param maxDate * @return */ public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException{ List<String> result = new ArrayList<String>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化爲年月 Calendar min = Calendar.getInstance(); Calendar max = Calendar.getInstance(); min.setTime(sdf.parse(minDate)); min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1); max.setTime(sdf.parse(maxDate)); max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2); Calendar curr = min; while (curr.before(max)) { result.add(sdf.format(curr.getTime())); curr.add(Calendar.MONTH, 1); } return result; } public static String toFormatterStr(String dateStr) { String formatter = "yyyy年MM月"; Date date = parseToDate(dateStr, "yyyy-MM"); return getDateToString(date, formatter); } public static String toFormatterStr(String formatter, String dateStr) { if (StringUtil.isEmpty(formatter)) { formatter = "yyyy年MM月dd日"; } Date date = parseToDate(dateStr, "yyyy-MM-dd"); return getDateToString(date, formatter); } /** * 將長時間格式字符串轉換爲時間 yyyy-MM-dd HH:mm:ss * * @param strDate * @return */ public static Date parseToDate(String strDate, String formatter) { SimpleDateFormat f = new SimpleDateFormat(formatter); ParsePosition pos = new ParsePosition(0); Date strtodate = f.parse(strDate, pos); return strtodate; } public static void main(String[] args) { //System.out.println(getFirstMonth("2018-09")); //System.out.println(getMonthBetween("2016-12-21","2016-12-28")); //System.out.println(""+getDateToString(getMaxDateOfMonth("2016-12","yyyy-MM"),"yyyy-MM-dd")); } }
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekUtils { public static void main(String[] args) { WeekUtils cd = new WeekUtils(); /* System.out.println("開始時間: " + cd.getStartDayOfWeekNo(2017,9) ); System.out.println("結束時間:" + cd.getEndDayOfWeekNo(2017,9) ); System.out.println(DateUtil.getCurrentDate("yyyy-MM"));*/ /* String month="2017-03"; System.out.println(cd.getMonthfirstDate(month)); System.out.println(cd.getMonthlastDate(month)); */ } /** * 根據給定的月份獲取本月第一天 * @param month * @return */ public String getMonthfirstDate(String month){ String firstDate=month+"-01"; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Date someDate=sdf.parse(month); Calendar ca = Calendar.getInstance(); ca.setTime(someDate); // someDate 爲你要獲取的那個月的時間 ca.set(Calendar.DAY_OF_MONTH, 1); //第一天 Date firstDate1 = ca.getTime(); firstDate=sdf1.format(firstDate1); return firstDate; } catch (ParseException e) { e.printStackTrace(); } return firstDate; } /** * 根據給定的月份獲取本月最後1天 * @param month * @return */ public String getMonthlastDate(String month){ String lastDate=month+"-30"; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Date someDate=sdf.parse(month); Calendar ca = Calendar.getInstance(); ca.setTime(someDate); // someDate 爲你要獲取的那個月的時間 ca.add(Calendar.MONTH, 1); ca.add(Calendar.DAY_OF_MONTH, -1); //最後一天 Date lastDate1 = ca.getTime(); lastDate=sdf1.format(lastDate1); return lastDate; } catch (ParseException e) { e.printStackTrace(); } return lastDate; } /** * get first date of given month and year * @param year * @param month * @return 本月第一天 */ public String getFirstDayOfMonth(int year,int month){ String monthStr = month < 10 ? "0" + month : String.valueOf(month); return year + "-"+monthStr+"-" +"01"; } /** * get the last date of given month and year * @param year * @param month * @return 本月最後一天 */ public String getLastDayOfMonth(int year,int month){ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR , year); calendar.set(Calendar.MONTH , month - 1); calendar.set(Calendar.DATE , 1); calendar.add(Calendar.MONTH, 1); calendar.add(Calendar.DAY_OF_YEAR , -1); return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH); } /** * get Calendar of given year * @param year * @return */ private Calendar getCalendarFormYear(int year){ Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.set(Calendar.YEAR, year); return cal; } /** 週一 * get start date of given week no of a year * @param year * @param weekNo * @return * @throws Exception */ public String getStartDayOfWeekNo(int year,int weekNo) { Calendar cal = getCalendarFormYear(year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); String strDate= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date; String date1=""; try { date = sdf.parse(strDate); date1=sdf.format(date); } catch (ParseException e) { e.printStackTrace(); } return date1; } /** * 週二 * @param year * @param weekNo * @return */ public String getTuesdayOfWeekNo(int year,int weekNo){ Calendar cal = getCalendarFormYear(year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); cal.add(Calendar.DAY_OF_WEEK, 1); String strDate= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date1=""; Date date; try { date = sdf.parse(strDate); date1=sdf.format(date); } catch (ParseException e) { e.printStackTrace(); } return date1; } /** * 週三 * @param year * @param weekNo * @return */ public String getWednesdayOfWeekNo(int year,int weekNo){ Calendar cal = getCalendarFormYear(year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); cal.add(Calendar.DAY_OF_WEEK, 2); String strDate= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date1=""; Date date; try { date = sdf.parse(strDate); date1=sdf.format(date); } catch (ParseException e) { e.printStackTrace(); } return date1; } /** * 週四 * @param year * @param weekNo * @return */ public String getThursdayOfWeekNo(int year,int weekNo){ Calendar cal = getCalendarFormYear(year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); cal.add(Calendar.DAY_OF_WEEK, 3); String strDate= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date1=""; Date date; try { date = sdf.parse(strDate); date1=sdf.format(date); } catch (ParseException e) { e.printStackTrace(); } return date1; } /** * 週五 * @param year * @param weekNo * @return */ public String getFridayOfWeekNo(int year,int weekNo){ Calendar cal = getCalendarFormYear(year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); cal.add(Calendar.DAY_OF_WEEK, 4); String strDate= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date1=""; Date date; try { date = sdf.parse(strDate); date1=sdf.format(date); } catch (ParseException e) { e.printStackTrace(); } return date1; } /** * get the end day of given week no of a year. * @param year * @param weekNo * @return 週末 */ public String getEndDayOfWeekNo(int year,int weekNo){ Calendar cal = getCalendarFormYear(year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); cal.add(Calendar.DAY_OF_WEEK, 6); String strDate= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date1=""; Date date; try { date = sdf.parse(strDate); date1=sdf.format(date); } catch (ParseException e) { e.printStackTrace(); } return date1; } }