- 浏览: 38984 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
qitian0008:
问下,就是这个模式窗口关闭后,在打开,上面第一次填写的数据还会 ...
提交模式窗口后,刷新父窗口数据 -
ZhengV_o_V:
刚好 碰到这个问题 按照楼主说的 解决了 感谢非常!!!
提交模式窗口后,刷新父窗口数据 -
xingyq521:
<div class="quote_t ...
Calendar常用方法封装 -
qinglintan:
公司的电脑里中文地址也打开了,....
chm文件打开,无法链接问题 -
qinglintan:
eternalee 写道隐藏之
....
chm文件打开,无法链接问题
Calendar常用方法封装
这些天,在忙于“采购提醒”,它是一个循环式的工作机制,周期有四类,周,月,季,半年。平时对Calendar关注相对少些,所以做起来到处找资料,现在对Calendar封装一下,方便大家更快,更好的进入正题,不用再关注一些费力不讨好的事了,声明先,里面的一些方法是直接借鉴其他同人,只希望大家少走弯路,少留点汗!大家也可以勇跃将自己认为比较好的操作日期方法贴在上面哦
package com.iwode.common; import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 常用日历操作辅助类 * * @author steven 2010-08-10 * @email:qing.tan@iwode.com */ public class CalendarUtil { private int weeks = 0;// 用来全局控制 上一周,本周,下一周的周数变化 private int MaxDate; // 一月最大天数 private int MaxYear; // 一年最大天数 /** * 测试 * * @param args */ public static void main(String[] args) { CalendarUtil tt = new CalendarUtil(); System.out.println("获取当天日期:" + tt.getNowTime("yyyy-MM-dd")); System.out.println("获取本周一日期:" + tt.getMondayOFWeek()); System.out.println("获取本周日的日期~:" + tt.getCurrentWeekday()); System.out.println("获取上周一日期:" + tt.getPreviousWeekday()); System.out.println("获取上周日日期:" + tt.getPreviousWeekSunday()); System.out.println("获取下周一日期:" + tt.getNextMonday()); System.out.println("获取下周日日期:" + tt.getNextSunday()); System.out.println("获得相应周的周六的日期:" + tt.getNowTime("yyyy-MM-dd")); System.out.println("获取本月第一天日期:" + tt.getFirstDayOfMonth()); System.out.println("获取本月最后一天日期:" + tt.getDefaultDay()); System.out.println("获取上月第一天日期:" + tt.getPreviousMonthFirst()); System.out.println("获取上月最后一天的日期:" + tt.getPreviousMonthEnd()); System.out.println("获取下月第一天日期:" + tt.getNextMonthFirst()); System.out.println("获取下月最后一天日期:" + tt.getNextMonthEnd()); System.out.println("获取本年的第一天日期:" + tt.getCurrentYearFirst()); System.out.println("获取本年最后一天日期:" + tt.getCurrentYearEnd()); System.out.println("获取去年的第一天日期:" + tt.getPreviousYearFirst()); System.out.println("获取去年的最后一天日期:" + tt.getPreviousYearEnd()); System.out.println("获取明年第一天日期:" + tt.getNextYearFirst()); System.out.println("获取明年最后一天日期:" + tt.getNextYearEnd()); System.out.println("获取本季度第一天:" + tt.getThisSeasonFirstTime(11)); System.out.println("获取本季度最后一天:" + tt.getThisSeasonFinallyTime(11)); System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:" + CalendarUtil.getTwoDay("2008-12-1", "2008-9-29")); System.out.println("获取当前月的第几周:" + tt.getWeekOfMonth()); System.out.println("获取当前年份:" + tt.getYear()); System.out.println("获取当前月份:" + tt.getMonth()); System.out.println("获取今天在本年的第几天:" + tt.getDayOfYear()); System.out.println("获得今天在本月的第几天(获得当前日):" + tt.getDayOfMonth()); System.out.println("获得今天在本周的第几天:" + tt.getDayOfWeek()); System.out.println("获得半年后的日期:" + tt.convertDateToString(tt.getTimeYearNext())); } /** * 获得当前年份 * * @return */ public static int getYear() { return Calendar.getInstance().get(Calendar.YEAR); } /** * 获得当前月份 * * @return */ public static int getMonth() { return Calendar.getInstance().get(Calendar.MONTH) + 1; } /** * 获得今天在本年的第几天 * * @return */ public static int getDayOfYear() { return Calendar.getInstance().get(Calendar.DAY_OF_YEAR); } /** * 获得今天在本月的第几天(获得当前日) * * @return */ public static int getDayOfMonth() { return Calendar.getInstance().get(Calendar.DAY_OF_MONTH); } /** * 获得今天在本周的第几天 * * @return */ public static int getDayOfWeek() { return Calendar.getInstance().get(Calendar.DAY_OF_WEEK); } /** * 获得今天是这个月的第几周 * * @return */ public static int getWeekOfMonth() { return Calendar.getInstance().get(Calendar.DAY_OF_WEEK_IN_MONTH); } /** * 获得半年后的日期 * * @return */ public static Date getTimeYearNext() { Calendar.getInstance().add(Calendar.DAY_OF_YEAR, 183); return Calendar.getInstance().getTime(); } /** * 将日期转换成字符串 * * @param dateTime * @return */ public static String convertDateToString(Date dateTime) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.format(dateTime); } /** * 得到二个日期间的间隔天数 * * @param sj1 * @param sj2 * @return */ public static String getTwoDay(String sj1, String sj2) { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); long day = 0; try { java.util.Date date = myFormatter.parse(sj1); java.util.Date mydate = myFormatter.parse(sj2); day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); } catch (Exception e) { return ""; } return day + ""; } /** * 根据一个日期,返回是星期几的字符串 * * @param sdate * @return */ public static String getWeek(String sdate) { // 再转换为时间 Date date = CalendarUtil.strToDate(sdate); Calendar c = Calendar.getInstance(); c.setTime(date); // int hour=c.get(Calendar.DAY_OF_WEEK); // hour中存的就是星期几了,其范围 1~7 // 1=星期日 7=星期六,其他类推 return new SimpleDateFormat("EEEE").format(c.getTime()); } /** * 将短时间格式字符串转换为时间 yyyy-MM-dd * * @param strDate * @return */ public static Date strToDate(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } /** * 两个时间之间的天数 * * @param date1 * @param date2 * @return */ public static long getDays(String date1, String date2) { if (date1 == null || date1.equals("")) return 0; if (date2 == null || date2.equals("")) return 0; // 转换为标准时间 SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = null; java.util.Date mydate = null; try { date = myFormatter.parse(date1); mydate = myFormatter.parse(date2); } catch (Exception e) { } long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); return day; } /** * 计算当月最后一天,返回字符串 * * @return */ public String getDefaultDay() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天 str = sdf.format(lastDate.getTime()); return str; } /** * 上月第一天 * * @return */ public String getPreviousMonthFirst() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 lastDate.add(Calendar.MONTH, -1);// 减一个月,变为下月的1号 // lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天 str = sdf.format(lastDate.getTime()); return str; } /** * 获取当月第一天 * * @return */ public String getFirstDayOfMonth() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 str = sdf.format(lastDate.getTime()); return str; } /** * 获得本周星期日的日期 * * @return */ public String getCurrentWeekday() { weeks = 0; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 6); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } /** * 获取当天时间 * * @param dateformat * @return */ public String getNowTime(String dateformat) { Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 可以方便地修改日期格式 String hehe = dateFormat.format(now); return hehe; } /** * 获得当前日期与本周日相差的天数 * * @return */ private int getMondayPlus() { Calendar cd = Calendar.getInstance(); // 获得今天是一周的第几天,星期日是第一天,星期二是第二天...... int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1 if (dayOfWeek == 1) { return 0; } else { return 1 - dayOfWeek; } } /** * 获得本周一的日期 * * @return */ public String getMondayOFWeek() { weeks = 0; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } /** * 获得相应周的周六的日期 * * @return */ public String getSaturday() { int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } /** * 获得上周星期日的日期 * * @return */ public String getPreviousWeekSunday() { weeks = 0; weeks--; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } /** * 获得上周星期一的日期 * * @return */ public String getPreviousWeekday() { weeks--; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } /** * 获得下周星期一的日期 */ public String getNextMonday() { weeks++; int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } /** * 获得下周星期日的日期 */ public String getNextSunday() { int mondayPlus = this.getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6); Date monday = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preMonday = df.format(monday); return preMonday; } private int getMonthPlus() { Calendar cd = Calendar.getInstance(); int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH); cd.set(Calendar.DATE, 1);// 把日期设置为当月第一天 cd.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 MaxDate = cd.get(Calendar.DATE); if (monthOfNumber == 1) { return -MaxDate; } else { return 1 - monthOfNumber; } } /** * 获得上月最后一天的日期 * * @return */ 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 String getNextMonthFirst() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.MONTH, 1);// 减一个月 lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天 str = sdf.format(lastDate.getTime()); return str; } /** * 获得下个月最后一天的日期 * * @return */ public String getNextMonthEnd() { 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 String getNextYearEnd() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.YEAR, 1);// 加一个年 lastDate.set(Calendar.DAY_OF_YEAR, 1); lastDate.roll(Calendar.DAY_OF_YEAR, -1); str = sdf.format(lastDate.getTime()); return str; } /** * 获得明年第一天的日期 * * @return */ public String getNextYearFirst() { String str = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.YEAR, 1);// 加一个年 lastDate.set(Calendar.DAY_OF_YEAR, 1); str = sdf.format(lastDate.getTime()); return str; } /** * 获得本年有多少天 * * @return */ private int getMaxYear() { Calendar cd = Calendar.getInstance(); cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天 cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。 int MaxYear = cd.get(Calendar.DAY_OF_YEAR); return MaxYear; } private int getYearPlus() { Calendar cd = Calendar.getInstance(); int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天 cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天 cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。 int MaxYear = cd.get(Calendar.DAY_OF_YEAR); if (yearOfNumber == 1) { return -MaxYear; } else { return 1 - yearOfNumber; } } /** * 获得本年第一天的日期 * * @return */ public String getCurrentYearFirst() { int yearPlus = this.getYearPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, yearPlus); Date yearDay = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preYearDay = df.format(yearDay); return preYearDay; } // 获得本年最后一天的日期 * public String getCurrentYearEnd() { Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); return years + "-12-31"; } // 获得上年第一天的日期 * public String getPreviousYearFirst() { Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); int years_value = Integer.parseInt(years); years_value--; return years_value + "-1-1"; } // 获得上年最后一天的日期 public String getPreviousYearEnd() { weeks--; int yearPlus = this.getYearPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, yearPlus + MaxYear * weeks + (MaxYear - 1)); Date yearDay = currentDate.getTime(); DateFormat df = DateFormat.getDateInstance(); String preYearDay = df.format(yearDay); return preYearDay; } /** * 获得本季度第一天 * * @param month * @return */ public String getThisSeasonFirstTime(int month) { int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }; int season = 1; if (month >= 1 && month <= 3) { season = 1; } if (month >= 4 && month <= 6) { season = 2; } if (month >= 7 && month <= 9) { season = 3; } if (month >= 10 && month <= 12) { season = 4; } int start_month = array[season - 1][0]; int end_month = array[season - 1][2]; Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); int years_value = Integer.parseInt(years); int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month); int end_days = getLastDayOfMonth(years_value, end_month); String seasonDate = years_value + "-" + start_month + "-" + start_days; return seasonDate; } /** * 获得本季度最后一天 * * @param month * @return */ public String getThisSeasonFinallyTime(int month) { int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }; int season = 1; if (month >= 1 && month <= 3) { season = 1; } if (month >= 4 && month <= 6) { season = 2; } if (month >= 7 && month <= 9) { season = 3; } if (month >= 10 && month <= 12) { season = 4; } int start_month = array[season - 1][0]; int end_month = array[season - 1][2]; Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式 String years = dateFormat.format(date); int years_value = Integer.parseInt(years); int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month); int end_days = getLastDayOfMonth(years_value, end_month); String seasonDate = years_value + "-" + end_month + "-" + end_days; return seasonDate; } /** * 获取某年某月的最后一天 * * @param year * 年 * @param month * 月 * @return 最后一天 */ private int getLastDayOfMonth(int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } if (month == 2) { if (isLeapYear(year)) { return 29; } else { return 28; } } return 0; } /** * 是否闰年 * * @param year * 年 * @return */ public boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } /** * 是否闰年 * * @param year * @return */ public boolean isLeapYear2(int year) { return new GregorianCalendar().isLeapYear(year); } }
tanlinqing
评论
19 楼
xingyq521
2011-04-18
<div class="quote_title">qinglintan 写道</div>
<div class="quote_div">
<p>这些天,在忙于“采购提醒”,它是一个循环式的工作机制,周期有四类,周,月,季,半年。平时对Calendar关注相对少些,所以做起来到处找资料,现在对Calendar封装一下,方便大家更快,更好的进入正题,不用再关注一些费力不讨好的事了,声明先,里面的一些方法是直接借鉴其他同人,只希望大家少走弯路,少留点汗!大家也可以勇跃将自己认为比较好的操作日期方法贴在上面哦</p>
<pre name="code" class="java"><pre name="code" class="java">package com.iwode.common;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 常用日历操作辅助类
*
* @author steven 2010-08-10
* @email:qing.tan@iwode.com
*/
public class CalendarUtil {
private int weeks = 0;// 用来全局控制 上一周,本周,下一周的周数变化
private int MaxDate; // 一月最大天数
private int MaxYear; // 一年最大天数
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
CalendarUtil tt = new CalendarUtil();
System.out.println("获取当天日期:" + tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本周一日期:" + tt.getMondayOFWeek());
System.out.println("获取本周日的日期~:" + tt.getCurrentWeekday());
System.out.println("获取上周一日期:" + tt.getPreviousWeekday());
System.out.println("获取上周日日期:" + tt.getPreviousWeekSunday());
System.out.println("获取下周一日期:" + tt.getNextMonday());
System.out.println("获取下周日日期:" + tt.getNextSunday());
System.out.println("获得相应周的周六的日期:" + tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本月第一天日期:" + tt.getFirstDayOfMonth());
System.out.println("获取本月最后一天日期:" + tt.getDefaultDay());
System.out.println("获取上月第一天日期:" + tt.getPreviousMonthFirst());
System.out.println("获取上月最后一天的日期:" + tt.getPreviousMonthEnd());
System.out.println("获取下月第一天日期:" + tt.getNextMonthFirst());
System.out.println("获取下月最后一天日期:" + tt.getNextMonthEnd());
System.out.println("获取本年的第一天日期:" + tt.getCurrentYearFirst());
System.out.println("获取本年最后一天日期:" + tt.getCurrentYearEnd());
System.out.println("获取去年的第一天日期:" + tt.getPreviousYearFirst());
System.out.println("获取去年的最后一天日期:" + tt.getPreviousYearEnd());
System.out.println("获取明年第一天日期:" + tt.getNextYearFirst());
System.out.println("获取明年最后一天日期:" + tt.getNextYearEnd());
System.out.println("获取本季度第一天:" + tt.getThisSeasonFirstTime(11));
System.out.println("获取本季度最后一天:" + tt.getThisSeasonFinallyTime(11));
System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:"
+ CalendarUtil.getTwoDay("2008-12-1", "2008-9-29"));
System.out.println("获取当前月的第几周:" + tt.getWeekOfMonth());
System.out.println("获取当前年份:" + tt.getYear());
System.out.println("获取当前月份:" + tt.getMonth());
System.out.println("获取今天在本年的第几天:" + tt.getDayOfYear());
System.out.println("获得今天在本月的第几天(获得当前日):" + tt.getDayOfMonth());
System.out.println("获得今天在本周的第几天:" + tt.getDayOfWeek());
System.out.println("获得半年后的日期:"
+ tt.convertDateToString(tt.getTimeYearNext()));
}
/**
* 获得当前年份
*
* @return
*/
public static int getYear() {
return Calendar.getInstance().get(Calendar.YEAR);
}
/**
* 获得当前月份
*
* @return
*/
public static int getMonth() {
return Calendar.getInstance().get(Calendar.MONTH) + 1;
}
/**
* 获得今天在本年的第几天
*
* @return
*/
public static int getDayOfYear() {
return Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
}
/**
* 获得今天在本月的第几天(获得当前日)
*
* @return
*/
public static int getDayOfMonth() {
return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
}
/**
* 获得今天在本周的第几天
*
* @return
*/
public static int getDayOfWeek() {
return Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
}
/**
* 获得今天是这个月的第几周
*
* @return
*/
public static int getWeekOfMonth() {
return Calendar.getInstance().get(Calendar.DAY_OF_WEEK_IN_MONTH);
}
/**
* 获得半年后的日期
*
* @return
*/
public static Date getTimeYearNext() {
Calendar.getInstance().add(Calendar.DAY_OF_YEAR, 183);
return Calendar.getInstance().getTime();
}
/**
* 将日期转换成字符串
*
* @param dateTime
* @return
*/
public static String convertDateToString(Date dateTime) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
return df.format(dateTime);
}
/**
* 得到二个日期间的间隔天数
*
* @param sj1
* @param sj2
* @return
*/
public static String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
try {
java.util.Date date = myFormatter.parse(sj1);
java.util.Date mydate = myFormatter.parse(sj2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
}
return day + "";
}
/**
* 根据一个日期,返回是星期几的字符串
*
* @param sdate
* @return
*/
public static String getWeek(String sdate) {
// 再转换为时间
Date date = CalendarUtil.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期几了,其范围 1~7
// 1=星期日 7=星期六,其他类推
return new SimpleDateFormat("EEEE").format(c.getTime());
}
/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 两个时间之间的天数
*
* @param date1
* @param date2
* @return
*/
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try {
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
}
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
/**
* 计算当月最后一天,返回字符串
*
* @return
*/
public String getDefaultDay() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号
lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 上月第一天
*
* @return
*/
public String getPreviousMonthFirst() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, -1);// 减一个月,变为下月的1号
// lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获取当月第一天
*
* @return
*/
public String getFirstDayOfMonth() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得本周星期日的日期
*
* @return
*/
public String getCurrentWeekday() {
weeks = 0;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获取当天时间
*
* @param dateformat
* @return
*/
public String getNowTime(String dateformat) {
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 可以方便地修改日期格式
String hehe = dateFormat.format(now);
return hehe;
}
/**
* 获得当前日期与本周日相差的天数
*
* @return
*/
private int getMondayPlus() {
Calendar cd = Calendar.getInstance();
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1
if (dayOfWeek == 1) {
return 0;
} else {
return 1 - dayOfWeek;
}
}
/**
* 获得本周一的日期
*
* @return
*/
public String getMondayOFWeek() {
weeks = 0;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得相应周的周六的日期
*
* @return
*/
public String getSaturday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得上周星期日的日期
*
* @return
*/
public String getPreviousWeekSunday() {
weeks = 0;
weeks--;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得上周星期一的日期
*
* @return
*/
public String getPreviousWeekday() {
weeks--;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得下周星期一的日期
*/
public String getNextMonday() {
weeks++;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得下周星期日的日期
*/
public String getNextSunday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
private int getMonthPlus() {
Calendar cd = Calendar.getInstance();
int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);
cd.set(Calendar.DATE, 1);// 把日期设置为当月第一天
cd.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
MaxDate = cd.get(Calendar.DATE);
if (monthOfNumber == 1) {
return -MaxDate;
} else {
return 1 - monthOfNumber;
}
}
/**
* 获得上月最后一天的日期
*
* @return
*/
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 String getNextMonthFirst() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH, 1);// 减一个月
lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得下个月最后一天的日期
*
* @return
*/
public String getNextMonthEnd() {
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 String getNextYearEnd() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR, 1);// 加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
lastDate.roll(Calendar.DAY_OF_YEAR, -1);
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得明年第一天的日期
*
* @return
*/
public String getNextYearFirst() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR, 1);// 加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得本年有多少天
*
* @return
*/
private int getMaxYear() {
Calendar cd = Calendar.getInstance();
cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
return MaxYear;
}
private int getYearPlus() {
Calendar cd = Calendar.getInstance();
int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天
cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
if (yearOfNumber == 1) {
return -MaxYear;
} else {
return 1 - yearOfNumber;
}
}
/**
* 获得本年第一天的日期
*
* @return
*/
public String getCurrentYearFirst() {
int yearPlus = this.getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, yearPlus);
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
return preYearDay;
}
// 获得本年最后一天的日期 *
public String getCurrentYearEnd() {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
return years + "-12-31";
}
// 获得上年第一天的日期 *
public String getPreviousYearFirst() {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
years_value--;
return years_value + "-1-1";
}
// 获得上年最后一天的日期
public String getPreviousYearEnd() {
weeks--;
int yearPlus = this.getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, yearPlus + MaxYear * weeks
+ (MaxYear - 1));
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
return preYearDay;
}
/**
* 获得本季度第一天
*
* @param month
* @return
*/
public String getThisSeasonFirstTime(int month) {
int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
int season = 1;
if (month >= 1 && month <= 3) {
season = 1;
}
if (month >= 4 && month <= 6) {
season = 2;
}
if (month >= 7 && month <= 9) {
season = 3;
}
if (month >= 10 && month <= 12) {
season = 4;
}
int start_month = array[season - 1][0];
int end_month = array[season - 1][2];
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
int end_days = getLastDayOfMonth(years_value, end_month);
String seasonDate = years_value + "-" + start_month + "-" + start_days;
return seasonDate;
}
/**
* 获得本季度最后一天
*
* @param month
* @return
*/
public String getThisSeasonFinallyTime(int month) {
int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
int season = 1;
if (month >= 1 && month <= 3) {
season = 1;
}
if (month >= 4 && month <= 6) {
season = 2;
}
if (month >= 7 && month <= 9) {
season = 3;
}
if (month >= 10 && month <= 12) {
season = 4;
}
int start_month = array[season - 1][0];
int end_month = array[season - 1][2];
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
int end_days = getLastDayOfMonth(years_value, end_month);
String seasonDate = years_value + "-" + end_month + "-" + end_days;
return seasonDate;
}
/**
* 获取某年某月的最后一天
*
* @param year
* 年
* @param month
* 月
* @return 最后一天
*/
private int getLastDayOfMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
|| month == 10 || month == 12) {
return 31;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
}
if (month == 2) {
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
}
return 0;
}
/**
* 是否闰年
*
* @param year
* 年
* @return
*/
public boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
/**
* 是否闰年
*
* @param year
* @return
*/
public boolean isLeapYear2(int year) {
return new GregorianCalendar().isLeapYear(year);
}
}
</pre>
</pre>
<p> tanlinqing<img src="/images/smiles/icon_arrow.gif" alt=""></p>
</div>
<p> </p>
<div class="quote_div">
<p>这些天,在忙于“采购提醒”,它是一个循环式的工作机制,周期有四类,周,月,季,半年。平时对Calendar关注相对少些,所以做起来到处找资料,现在对Calendar封装一下,方便大家更快,更好的进入正题,不用再关注一些费力不讨好的事了,声明先,里面的一些方法是直接借鉴其他同人,只希望大家少走弯路,少留点汗!大家也可以勇跃将自己认为比较好的操作日期方法贴在上面哦</p>
<pre name="code" class="java"><pre name="code" class="java">package com.iwode.common;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 常用日历操作辅助类
*
* @author steven 2010-08-10
* @email:qing.tan@iwode.com
*/
public class CalendarUtil {
private int weeks = 0;// 用来全局控制 上一周,本周,下一周的周数变化
private int MaxDate; // 一月最大天数
private int MaxYear; // 一年最大天数
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
CalendarUtil tt = new CalendarUtil();
System.out.println("获取当天日期:" + tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本周一日期:" + tt.getMondayOFWeek());
System.out.println("获取本周日的日期~:" + tt.getCurrentWeekday());
System.out.println("获取上周一日期:" + tt.getPreviousWeekday());
System.out.println("获取上周日日期:" + tt.getPreviousWeekSunday());
System.out.println("获取下周一日期:" + tt.getNextMonday());
System.out.println("获取下周日日期:" + tt.getNextSunday());
System.out.println("获得相应周的周六的日期:" + tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本月第一天日期:" + tt.getFirstDayOfMonth());
System.out.println("获取本月最后一天日期:" + tt.getDefaultDay());
System.out.println("获取上月第一天日期:" + tt.getPreviousMonthFirst());
System.out.println("获取上月最后一天的日期:" + tt.getPreviousMonthEnd());
System.out.println("获取下月第一天日期:" + tt.getNextMonthFirst());
System.out.println("获取下月最后一天日期:" + tt.getNextMonthEnd());
System.out.println("获取本年的第一天日期:" + tt.getCurrentYearFirst());
System.out.println("获取本年最后一天日期:" + tt.getCurrentYearEnd());
System.out.println("获取去年的第一天日期:" + tt.getPreviousYearFirst());
System.out.println("获取去年的最后一天日期:" + tt.getPreviousYearEnd());
System.out.println("获取明年第一天日期:" + tt.getNextYearFirst());
System.out.println("获取明年最后一天日期:" + tt.getNextYearEnd());
System.out.println("获取本季度第一天:" + tt.getThisSeasonFirstTime(11));
System.out.println("获取本季度最后一天:" + tt.getThisSeasonFinallyTime(11));
System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:"
+ CalendarUtil.getTwoDay("2008-12-1", "2008-9-29"));
System.out.println("获取当前月的第几周:" + tt.getWeekOfMonth());
System.out.println("获取当前年份:" + tt.getYear());
System.out.println("获取当前月份:" + tt.getMonth());
System.out.println("获取今天在本年的第几天:" + tt.getDayOfYear());
System.out.println("获得今天在本月的第几天(获得当前日):" + tt.getDayOfMonth());
System.out.println("获得今天在本周的第几天:" + tt.getDayOfWeek());
System.out.println("获得半年后的日期:"
+ tt.convertDateToString(tt.getTimeYearNext()));
}
/**
* 获得当前年份
*
* @return
*/
public static int getYear() {
return Calendar.getInstance().get(Calendar.YEAR);
}
/**
* 获得当前月份
*
* @return
*/
public static int getMonth() {
return Calendar.getInstance().get(Calendar.MONTH) + 1;
}
/**
* 获得今天在本年的第几天
*
* @return
*/
public static int getDayOfYear() {
return Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
}
/**
* 获得今天在本月的第几天(获得当前日)
*
* @return
*/
public static int getDayOfMonth() {
return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
}
/**
* 获得今天在本周的第几天
*
* @return
*/
public static int getDayOfWeek() {
return Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
}
/**
* 获得今天是这个月的第几周
*
* @return
*/
public static int getWeekOfMonth() {
return Calendar.getInstance().get(Calendar.DAY_OF_WEEK_IN_MONTH);
}
/**
* 获得半年后的日期
*
* @return
*/
public static Date getTimeYearNext() {
Calendar.getInstance().add(Calendar.DAY_OF_YEAR, 183);
return Calendar.getInstance().getTime();
}
/**
* 将日期转换成字符串
*
* @param dateTime
* @return
*/
public static String convertDateToString(Date dateTime) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
return df.format(dateTime);
}
/**
* 得到二个日期间的间隔天数
*
* @param sj1
* @param sj2
* @return
*/
public static String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
try {
java.util.Date date = myFormatter.parse(sj1);
java.util.Date mydate = myFormatter.parse(sj2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
}
return day + "";
}
/**
* 根据一个日期,返回是星期几的字符串
*
* @param sdate
* @return
*/
public static String getWeek(String sdate) {
// 再转换为时间
Date date = CalendarUtil.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期几了,其范围 1~7
// 1=星期日 7=星期六,其他类推
return new SimpleDateFormat("EEEE").format(c.getTime());
}
/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 两个时间之间的天数
*
* @param date1
* @param date2
* @return
*/
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try {
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
}
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
/**
* 计算当月最后一天,返回字符串
*
* @return
*/
public String getDefaultDay() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号
lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 上月第一天
*
* @return
*/
public String getPreviousMonthFirst() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
lastDate.add(Calendar.MONTH, -1);// 减一个月,变为下月的1号
// lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获取当月第一天
*
* @return
*/
public String getFirstDayOfMonth() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得本周星期日的日期
*
* @return
*/
public String getCurrentWeekday() {
weeks = 0;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获取当天时间
*
* @param dateformat
* @return
*/
public String getNowTime(String dateformat) {
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 可以方便地修改日期格式
String hehe = dateFormat.format(now);
return hehe;
}
/**
* 获得当前日期与本周日相差的天数
*
* @return
*/
private int getMondayPlus() {
Calendar cd = Calendar.getInstance();
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1
if (dayOfWeek == 1) {
return 0;
} else {
return 1 - dayOfWeek;
}
}
/**
* 获得本周一的日期
*
* @return
*/
public String getMondayOFWeek() {
weeks = 0;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得相应周的周六的日期
*
* @return
*/
public String getSaturday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得上周星期日的日期
*
* @return
*/
public String getPreviousWeekSunday() {
weeks = 0;
weeks--;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得上周星期一的日期
*
* @return
*/
public String getPreviousWeekday() {
weeks--;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得下周星期一的日期
*/
public String getNextMonday() {
weeks++;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得下周星期日的日期
*/
public String getNextSunday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
private int getMonthPlus() {
Calendar cd = Calendar.getInstance();
int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);
cd.set(Calendar.DATE, 1);// 把日期设置为当月第一天
cd.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
MaxDate = cd.get(Calendar.DATE);
if (monthOfNumber == 1) {
return -MaxDate;
} else {
return 1 - monthOfNumber;
}
}
/**
* 获得上月最后一天的日期
*
* @return
*/
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 String getNextMonthFirst() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH, 1);// 减一个月
lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得下个月最后一天的日期
*
* @return
*/
public String getNextMonthEnd() {
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 String getNextYearEnd() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR, 1);// 加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
lastDate.roll(Calendar.DAY_OF_YEAR, -1);
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得明年第一天的日期
*
* @return
*/
public String getNextYearFirst() {
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR, 1);// 加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
str = sdf.format(lastDate.getTime());
return str;
}
/**
* 获得本年有多少天
*
* @return
*/
private int getMaxYear() {
Calendar cd = Calendar.getInstance();
cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
return MaxYear;
}
private int getYearPlus() {
Calendar cd = Calendar.getInstance();
int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天
cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
if (yearOfNumber == 1) {
return -MaxYear;
} else {
return 1 - yearOfNumber;
}
}
/**
* 获得本年第一天的日期
*
* @return
*/
public String getCurrentYearFirst() {
int yearPlus = this.getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, yearPlus);
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
return preYearDay;
}
// 获得本年最后一天的日期 *
public String getCurrentYearEnd() {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
return years + "-12-31";
}
// 获得上年第一天的日期 *
public String getPreviousYearFirst() {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
years_value--;
return years_value + "-1-1";
}
// 获得上年最后一天的日期
public String getPreviousYearEnd() {
weeks--;
int yearPlus = this.getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, yearPlus + MaxYear * weeks
+ (MaxYear - 1));
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
return preYearDay;
}
/**
* 获得本季度第一天
*
* @param month
* @return
*/
public String getThisSeasonFirstTime(int month) {
int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
int season = 1;
if (month >= 1 && month <= 3) {
season = 1;
}
if (month >= 4 && month <= 6) {
season = 2;
}
if (month >= 7 && month <= 9) {
season = 3;
}
if (month >= 10 && month <= 12) {
season = 4;
}
int start_month = array[season - 1][0];
int end_month = array[season - 1][2];
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
int end_days = getLastDayOfMonth(years_value, end_month);
String seasonDate = years_value + "-" + start_month + "-" + start_days;
return seasonDate;
}
/**
* 获得本季度最后一天
*
* @param month
* @return
*/
public String getThisSeasonFinallyTime(int month) {
int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
int season = 1;
if (month >= 1 && month <= 3) {
season = 1;
}
if (month >= 4 && month <= 6) {
season = 2;
}
if (month >= 7 && month <= 9) {
season = 3;
}
if (month >= 10 && month <= 12) {
season = 4;
}
int start_month = array[season - 1][0];
int end_month = array[season - 1][2];
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
int end_days = getLastDayOfMonth(years_value, end_month);
String seasonDate = years_value + "-" + end_month + "-" + end_days;
return seasonDate;
}
/**
* 获取某年某月的最后一天
*
* @param year
* 年
* @param month
* 月
* @return 最后一天
*/
private int getLastDayOfMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
|| month == 10 || month == 12) {
return 31;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
}
if (month == 2) {
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
}
return 0;
}
/**
* 是否闰年
*
* @param year
* 年
* @return
*/
public boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
/**
* 是否闰年
*
* @param year
* @return
*/
public boolean isLeapYear2(int year) {
return new GregorianCalendar().isLeapYear(year);
}
}
</pre>
</pre>
<p> tanlinqing<img src="/images/smiles/icon_arrow.gif" alt=""></p>
</div>
<p> </p>
18 楼
nplw668
2010-08-13
推荐joda-time
17 楼
qinglintan
2010-08-12
有些时候感觉自己想得到一个XX日期,总是要想一下,到底要用哪个类,要怎么更简便得到它,这些方法应该有些可以不用去想了,直接可以借签一下
16 楼
qinglintan
2010-08-12
多谢指教.
15 楼
awfe
2010-08-12
有点造轮子的味道。
像取最后一天、第一天这类有专门的方法。比如本月最后一天的日期可以直接用Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH)
再比如是否闰年用java.util.GregorianCalendar的boolean isLeapYear(int year) 不是很直接吗
像取最后一天、第一天这类有专门的方法。比如本月最后一天的日期可以直接用Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH)
再比如是否闰年用java.util.GregorianCalendar的boolean isLeapYear(int year) 不是很直接吗
14 楼
husai
2010-08-12
piao_bo_yi 写道
lixjluck 写道
这个有问题的用法吧
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
不会吧,还有这种问题??
肯定有啊,还有Calendar 也是静态变量,时间就是系统启动时的时间,如果系统不重启,这个时间就一定了,不会变了。
13 楼
piao_bo_yi
2010-08-12
lixjluck 写道
这个有问题的用法吧
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
不会吧,还有这种问题??
12 楼
笑我痴狂
2010-08-12
有一些小问题 还是写的满齐全的 不过早有着方面的工具了
11 楼
chan.d
2010-08-12
楼主,且听我一言,
在 Utils 里面定义一个 private static 的对象, 这就已经是问题了。
这里还定义的是 private static Calendar calendar = Calendar.getInstance();
那么,你这个类拿到航空系统用用,估计要出人命。
需要严谨一些,虽然提炼的方法是不错的,确实可能用到,但从类的书写方面还需要下番功夫理解。
祝进步。
在 Utils 里面定义一个 private static 的对象, 这就已经是问题了。
这里还定义的是 private static Calendar calendar = Calendar.getInstance();
那么,你这个类拿到航空系统用用,估计要出人命。
需要严谨一些,虽然提炼的方法是不错的,确实可能用到,但从类的书写方面还需要下番功夫理解。
祝进步。
10 楼
mercyblitz
2010-08-12
sdh5724 写道
1. 从功能角度来说, 做的很不错。 很有些为业务开发节省时间的味道
2. 从设计角度来说, 错误的太多了。函数封装过于细节, 函数功能过于单一。还有一些BUG, 楼上的也指出了。 NTP同步导致你无法获取正确的时间。 有几个方法的处理方式值得商榷, 同时没有考虑国际化的问题。 时钟基准获得混乱。
建议你对Calendar对象继承封装更好一些。
2. 从设计角度来说, 错误的太多了。函数封装过于细节, 函数功能过于单一。还有一些BUG, 楼上的也指出了。 NTP同步导致你无法获取正确的时间。 有几个方法的处理方式值得商榷, 同时没有考虑国际化的问题。 时钟基准获得混乱。
建议你对Calendar对象继承封装更好一些。
你说的没有错,如果全面考虑的话,需要考虑Locale和TimeZone的问题。如果楼主的使用区域限制得比较死的话,Locale和TimeZone问题不大。
9 楼
sdh5724
2010-08-12
1. 从功能角度来说, 做的很不错。 很有些为业务开发节省时间的味道
2. 从设计角度来说, 错误的太多了。函数封装过于细节, 函数功能过于单一。还有一些BUG, 楼上的也指出了。 NTP同步导致你无法获取正确的时间。 有几个方法的处理方式值得商榷, 同时没有考虑国际化的问题。 时钟基准获得混乱。
建议你对Calendar对象继承封装更好一些。
2. 从设计角度来说, 错误的太多了。函数封装过于细节, 函数功能过于单一。还有一些BUG, 楼上的也指出了。 NTP同步导致你无法获取正确的时间。 有几个方法的处理方式值得商榷, 同时没有考虑国际化的问题。 时钟基准获得混乱。
建议你对Calendar对象继承封装更好一些。
8 楼
fansofjava
2010-08-11
apache commons 与joda
7 楼
mercyblitz
2010-08-11
qinglintan 写道
跟系统是没有关系的,这只是看你自己的需要,来调用哪个方法,在这里只是让操作一些常用的日期值变得更简单,而不用自己去拼接。跟系统业务是没有关系的
关键是一个错误的!
6 楼
mercyblitz
2010-08-11
lixjluck 写道
这个有问题的用法吧
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
确实Calendar不提供实时计算,楼主需要调用Calendar#setTimeInMillis(long),传入System#currentTimeMillis();并且需要合理的同步。
5 楼
qinglintan
2010-08-11
如果觉得有更好的方法,为何不贴上来,共大家一起学习呢
4 楼
qinglintan
2010-08-11
跟系统是没有关系的,这只是看你自己的需要,来调用哪个方法,在这里只是让操作一些常用的日期值变得更简单,而不用自己去拼接。跟系统业务是没有关系的
3 楼
fansofjava
2010-08-11
虽然精神值得学习,但这种东西早有组件可用了,至少有两个日期处理做得不错的组件。
2 楼
lixjluck
2010-08-11
这个有问题的用法吧
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
public static int getYear() {
你的系统一年不重启,那不是返回的是错误的年份。
1 楼
string2020
2010-08-11
封装的很好嘛,学习了。。
相关推荐
7. **字符串常用方法**:Android中,`String`类提供了很多实用的方法,如`substring()`、`trim()`、`indexOf()`等,用于字符串的处理。此外,`TextUtils`类提供了更多的字符串操作,如空判断、格式化等。 8. **系统...
JAVA中常用类的常用方法主要涵盖了java语言中基础类库的关键类以及它们提供的主要方法。以下是针对文档内容的详细解释: 1. java.lang.Object类 Object类是Java中所有类的超类,它提供了多种方法,这些方法在Java中...
Java为每种基本数据类型都提供了对应的包装类,这些包装类不仅封装了基本类型的值,还提供了许多有用的静态方法。 1. **valueOf() 方法**:将字符串转换为相应类型的对象。 2. **parseInt() 方法**:将字符串转换为...
以下将详细讲解标题和描述中提到的几个关键工具类及其封装方法: 1. **DateUtil**: Java中的日期时间处理在早期版本中较为复杂,`DateUtil` 类通常是为了封装`java.util.Date`、`Calendar` 和 `java.time` 包中的类...
在Java编程语言中,封装是一种核心的面向对象编程原则,它允许我们将数据和操作这些数据的方法捆绑在一起,以提供更好的代码组织和安全性。标题提到的"封装java常用工具的类"是一个很好的实践,将常见的功能模块化,...
总的来说,"iOS工具类封装"中的`Helper`类集成了日常开发中常用的一些功能,提高了代码的可读性和效率。它简化了字符串尺寸计算、日期获取和数据验证的过程,为iOS开发者提供了便利。这样的工具类在大型项目中尤其有...
本压缩包"基于Android系统Api封装常用工具类.zip"中包含的AJT-code很可能是作者为了方便Android应用开发而编写的自定义工具类集合。 首先,我们要理解Android系统的API是什么。Android API是Google为开发者提供的...
实验旨在加深学生对Java预定义类的理解,掌握常用类的运用技巧,以及熟练方法覆盖(重写)的实践。实验分为三个部分,分别围绕Math类、基本类型的包装类、日期类(Date和Calendar)、以及动态数组Vector类展开。 ##...
包装类是 Java 语言中最基本的类之一,它将基本数据类型封装为对象。每个基本数据类型都有对应的包装类,例如 Boolean 对应 boolean、Byte 对应 byte、Short 对应 short、Integer 对应 int、Long 对应 long、...
在这个“Java8应用封装,手写ORM,LOG,framework”的项目中,开发者显然专注于利用Java8的新特性来构建自己的轻量级框架,包括对象关系映射(ORM)、日志系统(LOG)以及一些通用的工具类和自动化配置。 1. **Java...
这些包装类不仅提供了基本类型的值封装,还提供了一些有用的静态方法,如`parseInt(String s)`用于将字符串转换为整数。 综上所述,理解`Object`类的核心方法(如`toString`和`equals`)及其重写方式对于提高代码...
1. **java.util.*** 包:这是Java最基础的工具类包,包含了集合框架(如ArrayList、LinkedList、HashMap等)、日期时间处理(Date、Calendar、SimpleDateFormat)、泛型、迭代器、枚举等重要工具类。例如,`...
思科路由器常用配置命令大全 ...Encapsulation PPP命令把PPP设置为由串口或ISDN接口使用的封装方法。Encapsulation sap命令规定在网络段上使用的以太网802.2格式Cisco的密码是sap。 二十三、End命令 End命令退出。
总的来说,这些Java常用类为开发者提供了丰富的工具,涵盖了对象基础、字符串处理、线程控制、数据封装和日期时间操作等多个方面,是Java编程不可或缺的部分。理解和熟练使用这些类,能够大大提高开发效率和代码质量...
常用方法1.1.2.字符串比较1.1.3. StringBuffer与 StringBuilder1.1.4. String、StringBuffer、StringBuilder的区别1.1.5.封装类比较1.2. Math类1.3. Arrays 类1.4. System 类1.5. Object 类1.6. Date 类1.6.1.日期...
工具类可能包含对旧版`java.util.Date`和`java.util.Calendar`的封装,或者使用新API的实用方法。 3. **字符串操作**:字符串在编程中非常常见,工具类可能会提供一些便捷的字符串格式化、拼接、查找、替换、分割等...
* 在NetBeans开发环境中阅读并分析程序,完成验证性实验,理解异常处理的方法,掌握String类的常用方法,掌握Date类以及Calendar类的常用方法,掌握BigInteger类的常用方法 * 依据题目要求设计程序,练习基本的算法...
基本类型是Java语言的基本数据类型,例如int、float、double等,而包装类则是对基本类型的封装,例如Integer、Float、Double等。包装类提供了许多有用的方法,可以对基本类型进行操作。 3. Runtime类 Runtime类是...