0000006_java学习之路_JAVA日期处理
来源:互联网 发布:线刷会清除所有数据吗 编辑:程序博客网 时间:2024/06/05 08:29
最近用到计算月份的第一天跟最后一天了,然后发现了公司这个日期处理工具,挺不错的,分享给大家!里面可以处理年、季度、月、旬、周之类的开始结束天数,每个方法都有注释,挺好用的,有些方法带有参数偏移量,有些不带,刚看到的时候也挺郁闷,到底是什么东西,就自己测试了一下,这里就举一个例子吧!
偏移量解释 比如今天时间是2015-11-06 getFirstDayOfYear(-1) 就是2014-01-01 getFirstDayOfYear(1)就是2016-01-01 getFirstDayOfMonth(-1) 就是2015-10-01 getFirstDayOfMonth(1)就是2015-12-01 getFirstDayOfMonth(0) 就是2015-11-01 等同于getFirstDayOfMonth()
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateHelper { /** * 时间范围:年 */ public static final int YEAR = 1; /** * 时间范围:季度 */ public static final int QUARTER = 2; /** * 时间范围:月 */ public static final int MONTH = 3; /** * 时间范围:旬 */ public static final int TENDAYS = 4; /** * 时间范围:周 */ public static final int WEEK = 5; /** * 时间范围:日 */ public static final int DAY = 6; /* 基准时间 */ private Date fiducialDate = null; private Calendar cal = null; private DateHelper(Date fiducialDate) { if (fiducialDate != null) { this.fiducialDate = fiducialDate; } else { this.fiducialDate = new Date(System.currentTimeMillis()); } this.cal = Calendar.getInstance(); this.cal.setTime(this.fiducialDate); this.cal.set(Calendar.HOUR_OF_DAY, 0); this.cal.set(Calendar.MINUTE, 0); this.cal.set(Calendar.SECOND, 0); this.cal.set(Calendar.MILLISECOND, 0); this.fiducialDate = this.cal.getTime(); } /** * 获取DateHelper实例 * * @param fiducialDate 基准时间 * @return */ public static DateHelper getInstance(Date fiducialDate) { return new DateHelper(fiducialDate); } /** * 获取DateHelper实例, 使用当前时间作为基准时间 * * @return */ public static DateHelper getInstance() { return new DateHelper(null); } /** * 获取年的第一天 * * @param offset 偏移量 * @return */ public Date getFirstDayOfYear(int offset) { cal.setTime(this.fiducialDate); cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } /** * 获取年的最后一天 * * @param offset 偏移量 * @return */ public Date getLastDayOfYear(int offset) { cal.setTime(this.fiducialDate); cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset); cal.set(Calendar.MONTH, Calendar.DECEMBER); cal.set(Calendar.DAY_OF_MONTH, 31); return cal.getTime(); } /** * 获取季度的第一天 * * @param offset 偏移量 * @return */ public Date getFirstDayOfQuarter(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.MONTH, offset * 3); int mon = cal.get(Calendar.MONTH); if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) { cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); } if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) { cal.set(Calendar.MONTH, Calendar.APRIL); cal.set(Calendar.DAY_OF_MONTH, 1); } if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) { cal.set(Calendar.MONTH, Calendar.JULY); cal.set(Calendar.DAY_OF_MONTH, 1); } if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) { cal.set(Calendar.MONTH, Calendar.OCTOBER); cal.set(Calendar.DAY_OF_MONTH, 1); } return cal.getTime(); } /** * 获取季度的最后一天 * * @param offset 偏移量 * @return */ public Date getLastDayOfQuarter(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.MONTH, offset * 3); int mon = cal.get(Calendar.MONTH); if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) { cal.set(Calendar.MONTH, Calendar.MARCH); cal.set(Calendar.DAY_OF_MONTH, 31); } if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) { cal.set(Calendar.MONTH, Calendar.JUNE); cal.set(Calendar.DAY_OF_MONTH, 30); } if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) { cal.set(Calendar.MONTH, Calendar.SEPTEMBER); cal.set(Calendar.DAY_OF_MONTH, 30); } if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) { cal.set(Calendar.MONTH, Calendar.DECEMBER); cal.set(Calendar.DAY_OF_MONTH, 31); } return cal.getTime(); } /** * 获取月的第一天 * * @param offset 偏移量 * @return */ public Date getFirstDayOfMonth(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.MONTH, offset); cal.set(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } /** * 获取月的最后一天 * * @param offset 偏移量 * @return */ public Date getLastDayOfMonth(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.MONTH, offset + 1); cal.set(Calendar.DAY_OF_MONTH, 1); cal.add(Calendar.DAY_OF_MONTH, -1); return cal.getTime(); } /** * 获取月的第一天 * * @param someDate * @return */ public Date getFirstDayOfMonth(Date someDate) { Calendar ca = Calendar.getInstance(); ca.setTime(someDate); // someDate 为你要获取的那个月的时间 ca.set(Calendar.DAY_OF_MONTH, 1); Date firstDate = ca.getTime(); return firstDate; } /** * 获取月的最后一天 * * @param someDate * @return */ public Date getLastDayOfMonth(Date someDate) { //System.out.println("AAAAAA"); Calendar ca = Calendar.getInstance(); ca.setTime(someDate); // someDate 为你要获取的那个月的时间 ca.add(Calendar.MONTH, 1); ca.set(Calendar.DAY_OF_MONTH, 1); ca.add(Calendar.DAY_OF_MONTH, -1); Date lastDate = ca.getTime(); return lastDate; } /** * 获取旬的第一天 * * @param offset 偏移量 * @return */ public Date getFirstDayOfTendays(int offset) { cal.setTime(this.fiducialDate); int day = cal.get(Calendar.DAY_OF_MONTH); if (day >= 21) { day = 21; } else if (day >= 11) { day = 11; } else { day = 1; } if (offset > 0) { day = day + 10 * offset; int monOffset = day / 30; day = day % 30; cal.add(Calendar.MONTH, monOffset); cal.set(Calendar.DAY_OF_MONTH, day); } else { int monOffset = 10 * offset / 30; int dayOffset = 10 * offset % 30; if ((day + dayOffset) > 0) { day = day + dayOffset; } else { monOffset = monOffset - 1; day = day - dayOffset - 10; } cal.add(Calendar.MONTH, monOffset); cal.set(Calendar.DAY_OF_MONTH, day); } return cal.getTime(); } /** * 获取旬的最后一天 * * @param offset 偏移量 * @return */ public Date getLastDayOfTendays(int offset) { Date date = getFirstDayOfTendays(offset + 1); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, -1); return cal.getTime(); } /** * 获取周的第一天(MONDAY) * * @param offset 偏移量 * @return */ public Date getFirstDayOfWeek(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.DAY_OF_MONTH, offset * 7); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return cal.getTime(); } /** * 获取周的最后一天(SUNDAY) * * @param offset 偏移量 * @return */ public Date getLastDayOfWeek(int offset) { cal.setTime(this.fiducialDate); cal.add(Calendar.DAY_OF_MONTH, offset * 7); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.add(Calendar.DAY_OF_MONTH, 6); return cal.getTime(); } /** * 获取周的第一天(MONDAY) * * @param someDate * @return */ public Date getFirstDayOfWeek(Date someDate) { Calendar ca = Calendar.getInstance(); ca.setTime(someDate); // someDate 为你要获取的那个月的时间 ca.set(Calendar.DAY_OF_WEEK, ca.getFirstDayOfWeek()); return ca.getTime(); } /** * 获取周的最后一天(SUNDAY) * * @param someDate * @return */ public Date getLastDayOfWeek(Date someDate) { Calendar ca = Calendar.getInstance(); ca.setTime(someDate); // someDate 为你要xl获取的那个月的时间 ca.set(Calendar.DAY_OF_WEEK, ca.getFirstDayOfWeek() + 6); return ca.getTime(); } /** * 根据日历的规则,为基准时间添加指定日历字段的时间量 * * @param field 日历字段, 使用Calendar类定义的日历字段常量 * @param offset 偏移量 * @return */ public Date add(int field, int offset) { cal.setTime(this.fiducialDate); cal.add(field, offset); return cal.getTime(); } /** * 根据日历的规则,为基准时间添加指定日历字段的时间量 * * @param field 日历字段, 使用Calendar类定义的日历字段常量 * @param offset 偏移量 * @return */ public Date offset(int field, int offset) { cal.setTime(this.fiducialDate); cal.add(field, offset); return cal.getTime(); } /** * 根据日历的规则,为基准时间添加指定日历字段的时间量 * * @param field 日历字段, 使用Calendar类定义的日历字段常量 * @param offset 偏移量 * @param format 格式 * @return */ public String offset(int field, int offset,String format) { DateFormat df = new SimpleDateFormat(format); cal.setTime(this.fiducialDate); cal.add(field, offset); return df.format(cal.getTime()); } /** * 根据日历的规则,为基准时间添加指定日历字段的单个时间单元 * * @param field 日历字段, 使用Calendar类定义的日历字段常量 * @param up 指定日历字段的值的滚动方向。true:向上滚动 / false:向下滚动 * @return */ public Date roll(int field, boolean up) { cal.setTime(this.fiducialDate); cal.roll(field, up); return cal.getTime(); } /** * 得到系统当前年份 * * @return */ public String getNowYear() { Calendar CD = Calendar.getInstance(); int YY = CD.get(Calendar.YEAR); return Integer.toString(YY); } public String getLastYear() { Calendar CD = Calendar.getInstance(); int YY = CD.get(Calendar.YEAR)-1; return Integer.toString(YY); } /** * 得到系统当前月份 * * @return */ public String getNowMonth() { Calendar CD = Calendar.getInstance(); int MM = CD.get(Calendar.MONTH) + 1; return Integer.toString(MM); } public String getLastMonth(int i) { Calendar CD = Calendar.getInstance(); int MM = CD.get(Calendar.MONTH) - i; return Integer.toString(MM); } /** * 得到系统当前日 * * @return */ public String getNowtDay() { Calendar CD = Calendar.getInstance(); int DD = CD.get(Calendar.DATE); return Integer.toString(DD); } /** * 得到当前年份 * * @return */ public int getNowYear(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int YY = CD.get(Calendar.YEAR); return YY; } public int getLastYear(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int YY = CD.get(Calendar.YEAR)-1; return YY; } /** * 得到当前月份 * * @return */ public int getNowMonth(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int MM = CD.get(Calendar.MONTH) + 1; return MM; } /** * 获取当前月的上一月 * * @param date * @return */ public int getLastMonth(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int MM = CD.get(Calendar.MONTH); return MM; } public int getLastMonth1(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int MM = CD.get(Calendar.MONTH) - 1; return MM; } public String getPreviousMonthEnd() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.MONTH, -1);//减一个月 lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天 lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天 str = sdf.format(lastDate.getTime()); return str; } /** * 得到当前日 * * @return */ public int getNowtDay(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int DD = CD.get(Calendar.DATE); return DD; } /** * 得到当前小时 * * @return */ public int getNowHour(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int DD = CD.get(Calendar.HOUR_OF_DAY); return DD; } public int getNowNumWeek(Date date) { Calendar CD = Calendar.getInstance(); CD.setTime(date); int DD = CD.get(Calendar.WEEK_OF_MONTH); return DD; } public static String getNumDayOfWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int intWeek = calendar.get(Calendar.DAY_OF_WEEK); String strReturn = " "; switch (intWeek) { case Calendar.SUNDAY: strReturn = "0"; break; case Calendar.MONDAY: strReturn = "1"; break; case Calendar.TUESDAY: strReturn = "2"; break; case Calendar.WEDNESDAY: strReturn = "3"; break; case Calendar.THURSDAY: strReturn = "4"; break; case Calendar.FRIDAY: strReturn = "5"; break; case Calendar.SATURDAY: strReturn = "6"; break; } return strReturn; } /** * 把字符串转换为日期 * * @param dateStr 日期字符串 * @param format 日期格式 * @return */ public static Date strToDate(String dateStr, String format) { Date date = null; if (dateStr != null && (!dateStr.equals(""))) { DateFormat df = new SimpleDateFormat(format); try { date = df.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } } return date; } /** * 把字符串转换为日期,日期的格式为yyyy-MM-dd HH:ss * * @param dateStr 日期字符串 * @return */ public static Date strToDate(String dateStr) { Date date = null; if (dateStr != null && (!dateStr.equals(""))) { if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) { dateStr = dateStr + " 00:00"; } else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}")) { dateStr = dateStr + ":00"; } else { System.out.println(dateStr + " 格式不正确"); return null; } DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:ss"); try { date = df.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } } return date; } /** * 把日期转换为字符串 * * @param date 日期实例 * @param format 日期格式 * @return */ public static String dateToStr(Date date, String format) { return (date == null) ? "" : new SimpleDateFormat(format).format(date); } /** * 取得当前日期 年-月-日 * * @return */ public static String getCurrentDate() { DateFormat f = new SimpleDateFormat("yyyy-MM-dd"); return f.format(Calendar.getInstance().getTime()); } /** * util date 转成字符串 * * @param date * @return */ public static String getStringDateTime(Date date) { String str = ""; if (date != null) str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date).toString(); return str; } /** * 返回指定日历中第几天的时间 * * @param ref * @return */ public static Date getDayOfWeekRef(Calendar calendar, int ref) { int thisDay = calendar.get(Calendar.DAY_OF_WEEK); int refDay = ref - thisDay; calendar.add(Calendar.DATE, refDay); return new Date(calendar.getTimeInMillis()); } /** * 返回本周日历中第几天的时间 * * @param ref * @return */ public static Date getDayOfWeekRef(int ref) { Calendar c = Calendar.getInstance(); int thisDay = c.get(Calendar.DAY_OF_WEEK); int refDay = ref - thisDay; c.add(Calendar.DATE, refDay); return new Date(c.getTimeInMillis()); } /** * 判断星期 * * @param date * @return */ public static String getDayOfWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int intWeek = calendar.get(Calendar.DAY_OF_WEEK); String strReturn = " "; switch (intWeek) { case Calendar.SUNDAY: strReturn = "Sunday"; break; case Calendar.MONDAY: strReturn = "Monday"; break; case Calendar.TUESDAY: strReturn = "Tuesday"; break; case Calendar.WEDNESDAY: strReturn = "Wednesday"; break; case Calendar.THURSDAY: strReturn = "Thursday"; break; case Calendar.FRIDAY: strReturn = "Friday"; break; case Calendar.SATURDAY: strReturn = "Saturday"; break; } return strReturn; } /** * 判断中文星期 * * @param date * @return */ public static String getGBKDayOfWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int intWeek = calendar.get(Calendar.DAY_OF_WEEK); String strReturn = " "; switch (intWeek) { case Calendar.SUNDAY: strReturn = "星期日"; break; case Calendar.MONDAY: strReturn = "星期一"; break; case Calendar.TUESDAY: strReturn = "星期二"; break; case Calendar.WEDNESDAY: strReturn = "星期三"; break; case Calendar.THURSDAY: strReturn = "星期四"; break; case Calendar.FRIDAY: strReturn = "星期五"; break; case Calendar.SATURDAY: strReturn = "星期六"; break; } return strReturn; } /** * 两个日期相隔天数 * @param start * @param end * @return */ public static int getDays(Date start,Date end){ Calendar cal = Calendar.getInstance(); cal.setTime(start); long time1 = cal.getTimeInMillis(); cal.setTime(end); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return (int)between_days; } }
0 0
- 0000006_java学习之路_JAVA日期处理
- 0000004_java学习之路_日期相差时间
- 0000001_java学习之路
- 黑马程序员_java学习之异常处理
- 0000007_JAVA学习之路_JAVA程序员成长之路
- 黑马程序员_java之日期时间类
- 黑马程序员_java基础之异常处理
- 17_Java日期时间
- 0000002_java学习之路_验证码的使用
- 黑马程序员_JAVA学习之GUI
- 黑马程序员_JAVA学习之网络编程
- 黑马程序员_JAVA学习之IO
- 黑马程序员_JAVA学习之概述
- JAVA基础_Java 学习之 异常
- 21_Java 异常处理
- JAVA学习42_Java时间日期格式转换
- FTP相关内容学习_java
- 马士兵_JAVA自学之路
- Oracle Instant Client(即时客户端) 安装与配置
- mysql group by 用法解析(详细)
- 黑马程序员---自学随堂笔记----基本数据类型
- Javascript模块化编程(三):require.js的用法
- Java for Web学习笔记(三):Servlet(1)Maven
- 0000006_java学习之路_JAVA日期处理
- Popuwindow点击外部控件切换popuwindow——解决点击外部事件不响应问题。
- zigbee网关 利用现有的网络实现全球控制
- Eclipse配置AspectJ插件AJDT
- ajax get与post请求
- 如何将网上下载的程序安装到自己的iphone上
- VS2013下OpenCV249的配置
- struts2中改变struts.xml默认路径或可能遇到的问题
- 关于.NET弹出窗口提示/MD5加密