Java-日期工具类

来源:互联网 发布:面试美工需要注意什么 编辑:程序博客网 时间:2024/06/16 02:34

本文主要讲述:

1:Calendar获取时间(年,月,日...)

2:Calendar时间加减操作

3:Calendar获取(一天/本周/本月/本年)最小或最大时间

4:根据当前天打印某天日期(以天为单位)

5:据当前周打印某周日期(以天为单位)

6:根据当前月打印某月日期(以天为单位)

7:根据当前年打印某年日期(以天为单位)

8:根据当前年打印某年日期(以月为单位)

9:打印某年所有月份

10:打印指定范围内的日期(以天为单位)

11:打印指定范围内的日期(以月为单位)

12:生成随机日期


/** * 日期工具类 *  * @author NL *  */public class DateUtil {public final static SimpleDateFormat sdfy = new SimpleDateFormat("yyyy");public final static SimpleDateFormat sdfym = new SimpleDateFormat("yyyy-MM");public final static SimpleDateFormat sdfymd = new SimpleDateFormat("yyyy-MM-dd");public final static SimpleDateFormat sdfymdhms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/** * 获取日期示例 */public static void DateAcquisition() {System.out.println("-----时间获取-----");Calendar cal = Calendar.getInstance();System.out.println("获取当前时间:" + sdfymdhms.format(cal.getTime()));System.out.println("获取当前时间戳:" + cal.getTimeInMillis());System.out.println("获取当前是一年中第几天:" + cal.get(Calendar.DAY_OF_YEAR));System.out.println("获取当前年:" + cal.get(Calendar.YEAR));System.out.println("获取当前月:" + (cal.get(Calendar.MONTH) + 1));System.out.println("获取当前日:" + cal.get(Calendar.DAY_OF_MONTH));System.out.println("获取当前周:" + (cal.get(Calendar.DAY_OF_WEEK) - 1));System.out.println("获取当前时:" + cal.get(Calendar.HOUR_OF_DAY));System.out.println("获取当前分:" + cal.get(Calendar.MINUTE));System.out.println("获取当前秒:" + cal.get(Calendar.SECOND));System.out.println("获取当前毫秒:" + cal.get(Calendar.MILLISECOND));}/** * 时间加减操作 */public static void DateAdditionAndSubtraction() {Calendar cal = Calendar.getInstance();System.out.println("-----时间加减-----");System.out.println("时间加减方法:cal.add(Calendar.函数, 负数/正数);/n例如:");cal.add(Calendar.YEAR, 1);System.out.println("加一年后的日期:" + sdfymdhms.format(cal.getTime()));cal.add(Calendar.YEAR, -1);System.out.println("减一年后的日期:" + sdfymdhms.format(cal.getTime()));cal.add(Calendar.MONTH, 1);System.out.println("加一月后的日期:" + sdfymdhms.format(cal.getTime()));cal.add(Calendar.MONTH, -1);System.out.println("减一月后的日期:" + sdfymdhms.format(cal.getTime()));}/** * 演示:获取某(年/月/周/日)最小或最大日期 * @param args */public static void main(String[] args) {// 今年最小日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"y",0)));// 今年最大日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"y",1)));// 本月最小日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"m",0)));// 本月最大日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"m",2)));// 本周最小日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"w",0)));// 本周最大日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"w",1)));// 今天最小日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"d",0)));// 今天最大日期System.out.println(sdfymdhms.format(DayMaxTime(Calendar.getInstance(),"d",1)));}/** * 获取某(年/月/周/日)最小或最大日期 *  * @param cal 日期:如果为当前填写:Calendar.getInstance() * @param ymwd 填写(y:年;m:月;w:周;d:日) * @param Size 填写(0:最小;1:最大) * @return */public static Date DayMaxTime(Calendar cal,String ymwd,int size) {if(ymwd.equals("y")){if(size==0){cal.set(Calendar.MONTH, 0);cal.set(Calendar.DAY_OF_MONTH, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);}else{cal.set(Calendar.MONTH, 11);cal.set(Calendar.DAY_OF_MONTH, 31);cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(Calendar.MINUTE, 59);cal.set(Calendar.SECOND, 59);}}else if(ymwd.equals("m")){if(size==0){cal.set(Calendar.DAY_OF_MONTH, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);}else{cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));  cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(Calendar.MINUTE, 59);cal.set(Calendar.SECOND, 59);}}else if(ymwd.equals("w")){if(size==0){cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);}else{cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);cal.add(Calendar.DAY_OF_MONTH, 6);cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(Calendar.MINUTE, 59);cal.set(Calendar.SECOND, 59);}}else if(ymwd.equals("d")){if(size==0){cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);}else{cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(Calendar.MINUTE, 59);cal.set(Calendar.SECOND, 59);}}return cal.getTime();}/** * 根据当前天打印某天日期(以天为单位) *  * @param Month: (...;-1:昨天;0:今天;1:明天;...) * @return Calendar */public static Date PrintADay(int Day) {// 获取当前日期Calendar cal = Calendar.getInstance();// 使用add方法进行加减操作cal.add(Calendar.DAY_OF_MONTH, Day);return cal.getTime();}/** * 根据当前周打印某周日期(以天为单位) *  * @param Month: (...;-1:上周;0:本周;1:下周;...) * @param PrintRule: 是否可以打印今后的日期 * @return List<Calendar> * @throws Exception */public static List<Date> PrintAWeek(int Week, boolean PrintRule) {List<Date> listCal = new ArrayList<Date>();// 获取当前日期,用于控制是否打印今后日期Calendar constantCal = Calendar.getInstance(); // 获取当前日期Calendar cal = Calendar.getInstance();cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);// 因为获取的星期是以周末为一周的第一天,所以在此减去一天cal.add(Calendar.DAY_OF_MONTH, -1);// 控制周cal.add(Calendar.WEEK_OF_MONTH, Week);// 获取当前周的第一天cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);for (int i = 0; i < 7; i++) {if (!PrintRule) {if (cal.getTimeInMillis() <= constantCal.getTimeInMillis()) {listCal.add(cal.getTime());cal.add(Calendar.DAY_OF_MONTH, 1);} else {break;}} else {listCal.add(cal.getTime());cal.add(Calendar.DAY_OF_MONTH, 1);}}return listCal;}/** * 根据当前月打印某月日期(以天为单位) *  * @param Month:(...;-1:上个月;0:本月;1:下个月;...) * @param PrintRule:是否可以打印今后的日期 * @return List<String> */public static List<Date> PrintAMonth1(int Month, boolean PrintRule) {List<Date> listStr = new ArrayList<Date>();Calendar constantCal = Calendar.getInstance();Calendar cal = Calendar.getInstance();cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);// 控制月份cal.add(Calendar.MARCH, Month);// 获取本月天数,用来遍历int count = cal.getActualMaximum(Calendar.DATE) + 1;// 更改日期的第一天cal.set(Calendar.DAY_OF_MONTH, 1);for (int i = 1; i < count; i++) {if (!PrintRule) {if (cal.getTimeInMillis() <= constantCal.getTimeInMillis()) {listStr.add(cal.getTime());cal.add(Calendar.DAY_OF_MONTH, 1);} else {break;}} else {listStr.add(cal.getTime());cal.add(Calendar.DAY_OF_MONTH, 1);}}return listStr;}/** * 根据当前年打印某年日期(以天为单位) *  * @param Month:(...;-1:去年;0:今年;1:明年;...) * @param PrintRule:是否可以打印今后的日期 * @return List<String> */public static List<Date> PrintAYear1(int Year, boolean PrintRule) {List<Date> listStr = new ArrayList<Date>();Calendar constantCal = Calendar.getInstance();Calendar cal = Calendar.getInstance();// 控制年份cal.add(Calendar.YEAR, Year);// 用于判断是否可以结束循环long countYear = cal.get(Calendar.YEAR);// 设置日期为1月1号cal.set(cal.get(Calendar.YEAR) - 1, 12, 1);while (countYear == cal.get(Calendar.YEAR)) {if (!PrintRule) {if (cal.getTimeInMillis() <= constantCal.getTimeInMillis()) {listStr.add(cal.getTime());cal.add(Calendar.DAY_OF_MONTH, 1);} else {break;}} else {listStr.add(cal.getTime());cal.add(Calendar.DAY_OF_MONTH, 1);}}return listStr;}/** * 根据当前年打印某年日期(以月为单位) *  * @param Month:(...;-1:去年;0:今年;1:明年;...) * @param PrintRule:是否可以打印今后的日期 * @return List<String> */public static List<Date> PrintAYear2(int Year, boolean PrintRule) {List<Date> listDate = new ArrayList<Date>();Calendar constantCal = Calendar.getInstance();Calendar cal = Calendar.getInstance();cal.add(Calendar.YEAR, Year);cal.set(Calendar.MONTH, 0);cal.set(Calendar.DAY_OF_MONTH, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);constantCal.set(Calendar.YEAR, Year + 1);for (int i = 1 ; i < 13; i++) {if (!PrintRule) {if (cal.getTimeInMillis() <= constantCal.getTimeInMillis()) {listDate.add(cal.getTime());cal.add(Calendar.MONTH, 1);} else {break;}} else {listDate.add(cal.getTime());cal.add(Calendar.MONTH, 1);}}return listDate;}/** * 打印某年所有月份 *  * @param Year:年 * @param PrintRule:是否可以打印今后的日期 * @return List<String> */public static List<Date> PrintThisYear(int Year, boolean PrintRule) {List<Date> listDate = new ArrayList<Date>();Calendar constantCal = Calendar.getInstance();Calendar cal = Calendar.getInstance();cal.set(Calendar.YEAR, Year);cal.set(Calendar.MONTH, 0);cal.set(Calendar.DAY_OF_MONTH, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);constantCal.set(Calendar.YEAR, Year + 1);for (int i = 1 ; i < 13; i++) {if (!PrintRule) {if (cal.getTimeInMillis() <= constantCal.getTimeInMillis()) {listDate.add(cal.getTime());cal.add(Calendar.MONTH, 1);// 每次循环+1月} else {break;}} else {listDate.add(cal.getTime());cal.add(Calendar.MONTH, 1);// 每次循环+1月}}return listDate;}/** * 打印指定范围内的日期(以天为单位) *  * @param StartDate: 开始日期 * @param EndDate: 结束日期 * @return List<String> */public static List<Date> PrintRangeDate1(String StartDate, String EndDate) {List<Date> listStr = new ArrayList<Date>();Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();try {cal1.setTime(sdfymd.parse(StartDate)); // 开始日期cal2.setTime(sdfymd.parse(EndDate));// 截止日期int days = (int) ((cal2.getTimeInMillis() - cal1.getTimeInMillis()) / 86400000) + 1;// 计算一共多少天for (int i = 0; i < days; i++) {listStr.add(cal1.getTime());cal1.add(Calendar.DAY_OF_MONTH, 1);}} catch (ParseException e) {e.printStackTrace();}return listStr;}/** * 打印指定范围内的日期(以月为单位) * 比如打印: PrintRangeDate2("2016-01","2016-12"); *  * @param StartDate:开始日期 () * @param EndDate:结束日期() * @return List<String> */public static List<Date> PrintRangeDate2(String StartDate, String EndDate) {List<Date> listDate = new ArrayList<Date>();Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();try {cal1.setTime(sdfym.parse(StartDate));// 开始日期cal2.setTime(sdfym.parse(EndDate)); // 截止日期for (int i = 1 ; i < 13; i++) {if (cal1.getTimeInMillis() <= cal2.getTimeInMillis()) {listDate.add(cal1.getTime());cal1.add(Calendar.MONTH, 1);// 每次循环+1月} else {break;}}} catch (ParseException e) {e.printStackTrace();}return listDate;}/** * 生成随机时间 *  * @param beginDate:开始时间 * @param endDate:结束时间 * @return */public static Date randomDate(String beginDate, String endDate) {try {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");// 构造开始日期Date start = format.parse(beginDate);// 构造结束日期Date end = format.parse(endDate); // 结束日期必须大于开始日期if (start.getTime() >= end.getTime()) {return null;}long date = random(start.getTime(), end.getTime());return new Date(date);} catch (Exception e) {e.printStackTrace();}return null;}private static long random(long begin, long end) {long rtn = begin + (long) (Math.random() * (end - begin));// 如果返回的是开始时间和结束时间,则递归调用本函数查找随机值if (rtn == begin || rtn == end) {return random(begin, end);}return rtn;}}


0 0
原创粉丝点击