java常用日期操作

来源:互联网 发布:笔记本牌子排行榜知乎 编辑:程序博客网 时间:2024/04/29 11:56
package com.wj.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Locale;public class DateUtil {/** * @return 返回系统当前时间 */public static Date getCurrentDate(){  return Calendar.getInstance().getTime() ;}/** * 根据格式获取当前时间 * @param format * @return */public static String getTimeOfNow(String format){SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);return sdf.format(new Date());}/** * 根据格式获取本周一的开始时间 *  * @return */public static String getFirstDayOfWeek(String format){SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);Calendar cal = Calendar.getInstance(Locale.CHINA);cal.setFirstDayOfWeek(Calendar.MONDAY);cal.setTimeInMillis(System.currentTimeMillis());cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);return sdf.format(cal.getTime());}/** * 根据格式获取本周末的结束时间 * @return */public static String getLastDayOfWeek(String format){SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);Calendar cal = Calendar.getInstance(Locale.CHINA);cal.setFirstDayOfWeek(Calendar.MONDAY);cal.setTimeInMillis(System.currentTimeMillis());cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);return sdf.format(cal.getTime());}/** * 时间格式的转换 * @param dateStr * @param oldFormat * @param newFormat * @return * @throws ParseException */public static String reverseDateFormat(String dateStr,String oldFormat,String newFormat) throws ParseException{Date date = new SimpleDateFormat(oldFormat,Locale.CHINA).parse(dateStr);return new SimpleDateFormat(newFormat,Locale.CHINA).format(date);}/** * 将当天时间加上或减去若干天  按格式返回 * @param format 格式 * @param num  天数 * @return */public static String getAfterDay(String format,int num){SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);Calendar cal = Calendar.getInstance(Locale.CHINA);cal.add(Calendar.DAY_OF_WEEK, num);return sdf.format(cal.getTime());}/** * 将特定时间加上或减去若干天  按格式返回 * @param format 格式 * @param num  天数 * @return */public static String getAfterSpecificDay(String timeStr,String format,int num){SimpleDateFormat sdf=new SimpleDateFormat(format);Calendar cal = Calendar.getInstance(Locale.CHINA);Date date=null;try {date = sdf.parse(timeStr);} catch (ParseException e) {e.printStackTrace();}cal.setTime(date);cal.add(Calendar.DAY_OF_WEEK, num);return sdf.format(cal.getTime());}/** * 将当天时间加上或减去若干月  按格式返回 * @param format 格式 * @param num  天数 * @return */public static String getAfterMonth(String format,int num){SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);Calendar cal = Calendar.getInstance(Locale.CHINA);cal.add(Calendar.MONTH, num);return sdf.format(cal.getTime());}/** * 将当天时间加上或减去若干年  按格式返回 * @param format 格式 * @param num  天数 * @return */public static String getAfterYear(String format,int num){SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);Calendar cal = Calendar.getInstance(Locale.CHINA);cal.add(Calendar.YEAR, num);return sdf.format(cal.getTime());}/** * 比较2个日期字符串的大小    * @param dateStr1 * @param dateStr2 * @param format1 * @param format2 * @return  1:dateStr1>dateStr2 * 0: dateStr1=dateStr2 *    -1: dateStr1<dateStr2 */public static int dateStringCompare(String dateStr1,String dateStr2,String format1,String format2){SimpleDateFormat sdf1 = new SimpleDateFormat(format1,Locale.CHINA);SimpleDateFormat sdf2 = new SimpleDateFormat(format2,Locale.CHINA);Calendar cal1 = Calendar.getInstance(Locale.CHINA);Calendar cal2 = Calendar.getInstance(Locale.CHINA);Date date1 = null;Date date2 = null;try {date1 = sdf1.parse(dateStr1);date2 = sdf2.parse(dateStr2);} catch (ParseException e) {e.printStackTrace();}cal1.setTime(date1);cal2.setTime(date2);return cal1.compareTo(cal2); }/** * 计算2个日期的间隔天数 * @param t1 * @param t2 * @return * @throws ParseException */public static int getBetweenDays(String t1,String t2,String format1,String format2) { SimpleDateFormat sdf1 = new SimpleDateFormat(format1); SimpleDateFormat sdf2 = new SimpleDateFormat(format2); int betweenDays = 0; Date d1 = null;Date d2 = null;try {d1 = sdf1.parse(t1);d2 = sdf2.parse(t2); } catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();} Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); // 保证第二个时间一定大于第一个时间 if(c1.after(c2)){ c1.setTime(d2);c2.setTime(d1); } int betweenYears = c2.get(Calendar.YEAR)-c1.get(Calendar.YEAR); betweenDays = c2.get(Calendar.DAY_OF_YEAR)-c1.get(Calendar.DAY_OF_YEAR); for(int i=0;i<betweenYears;i++){ c1.set(Calendar.YEAR,(c1.get(Calendar.YEAR)+1)); betweenDays += c1.getMaximum(Calendar.DAY_OF_YEAR); } return betweenDays+1; }/** * 获取指定月份的天数 * @param yearMonth年月 * @param format格式 * @return */public static int getDaysOfMonth(String yearMonth,String format){int dayNum = 0;SimpleDateFormat sdf = new SimpleDateFormat(format); Date date = null;try {date = sdf.parse(yearMonth);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}Calendar cal = Calendar.getInstance(); cal.setTime(date);dayNum = cal.getActualMaximum(Calendar.DAY_OF_MONTH);return dayNum;}public static void main(String []args) throws ParseException{System.out.println(new DateUtil().getTimeOfNow("yyyy/MM/dd HH:mm:ss"));System.out.println(new DateUtil().getFirstDayOfWeek("yyyy/MM/dd")+" 00:00:00");System.out.println(new DateUtil().getLastDayOfWeek("yyyy-MM-dd")+" 23:59:59");System.out.println(new DateUtil().reverseDateFormat("2012-07-06", "yyyy-MM-dd","yyyy/MM/dd"));System.out.println(new DateUtil().getAfterDay("yyyy/MM/dd", 4));System.out.println(new DateUtil().getAfterMonth("yyyy/MM/dd", 4));System.out.println(new DateUtil().getAfterYear("yyyy/MM/dd", 4));System.out.println(new DateUtil().getAfterSpecificDay("2112/9/9", "yyyy/MM/dd", 10));System.out.println(new DateUtil().dateStringCompare(new DateUtil().getTimeOfNow("yyyy-MM-dd"), "2012/10/17", "yyyy-MM-dd", "yyyy/MM/dd"));System.out.println(new DateUtil().getBetweenDays("2116-9-1", "2115/9/9","yyyy-MM-dd", "yyyy/MM/dd"));System.out.println(new DateUtil().getDaysOfMonth("2012-8", "yyyy-MM"));}}