Java经常使用日期工具类,常规的日期、时间格式转换,字符串转Date对象,Date对象转字符串,日期比较,日期添加指定年、月、天等,计算两个日期之间相差的天数、月数、年数等;java
DateUtils.java工具
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @author JL * @version V1.0 * @Description 用java.util.Calendar封装日期、时间操做工具类 */ public class DateUtils { public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; public static final String YYYY_MM_DD = "yyyy-MM-dd"; public static final String HH_MM_SS = "HH:mm:ss"; public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static final String YYYYMMDD = "yyyyMMdd"; public static final String HHMMSS = "HHmmss"; public static String getTimeStr(Date date, String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } public static String getTimeStr(String pattern){ return getTimeStr(new Date(), pattern); } public static String getTimeStr(Date date){ return getTimeStr(date, YYYY_MM_DD_HH_MM_SS); } public static String getTimeStr(){ return getTimeStr(new Date(), YYYY_MM_DD_HH_MM_SS); } public static String getDateStr(Date date){ return getTimeStr(date, YYYY_MM_DD); } public static String getDateStr(){ return getTimeStr(new Date(), YYYY_MM_DD); } public static Long getTimeToLong(){ return Long.parseLong(getTimeStr(new Date(), YYYYMMDDHHMMSS)); } public static Long getTimeToLong(String timeStr){ timeStr = timeStr.replaceAll("-",""); timeStr = timeStr.replaceAll("/",""); timeStr = timeStr.replaceAll(" ",""); timeStr = timeStr.replaceAll(":",""); return Long.parseLong(timeStr); } public static Long getTimeToLong(Date date){ return Long.parseLong(getTimeStr(date, YYYYMMDDHHMMSS)); } public static Date getTime(String timeStr, String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); try{ return sdf.parse(timeStr); }catch(ParseException pe){ System.out.println("时间格式不对:" + pe.getMessage()); } return null; } public static Date getTime(String timeStr){ return getTime(timeStr, YYYY_MM_DD_HH_MM_SS);//默认YYYY_MM_DD_HH_MM_SS } public static Date getDate(String dateStr){ return getTime(dateStr, YYYY_MM_DD);//默认YYYY_MM_DD } public static int getYear(){ return Calendar.getInstance().get(Calendar.YEAR); } public static int getMonth(){ return Calendar.getInstance().get(Calendar.MONTH) + 1; } public static int getDay(){ return Calendar.getInstance().get(Calendar.DAY_OF_MONTH); } public static Date addDayDate(int amount){ return addTimeDate(Calendar.DAY_OF_MONTH, amount); } public static int addDay(int amount){ return addTime(Calendar.DAY_OF_MONTH, amount); } public static Date addMonthDate(int amount){ return addTimeDate(Calendar.MONTH, amount); } public static int addMonth(int amount){ return addTime(Calendar.MONTH, amount); } public static Date addYearDate(int amount){ return addTimeDate(Calendar.YEAR, amount); } public static int addYear(int amount){ return addTime(Calendar.YEAR, amount); } public static Date addMillisecondDate(long amout){ return new Date(addMillisecond(amout)); } public static long addMillisecond(long amout){ return new Date().getTime() + amout; } //按不一样的单位,添加时间值,返回添加后的时间值 public static int addTime(int field, int amount){ Calendar calendar = Calendar.getInstance(); calendar.add(field, amount); return calendar.get(field); } //按不一样的单位,添加时间值,返回date对象 public static Date addTimeDate(int field, int amount){ Calendar calendar = Calendar.getInstance(); calendar.add(field, amount); return calendar.getTime(); } //相差年数(按月数统计,若是不按月数统计,直接取年份相减便可) public static int differYear(Date date1, Date date2){ int dMonth = differMonth(date1, date2); return dMonth > 0 ? dMonth / 12 : 0; } //相差月数(精确到天) public static int differMonth(Date date1, Date date2){ Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); //年相减 * 12 + 月相减 int year = calendar1.get(Calendar.YEAR) - calendar2.get(Calendar.YEAR); int month = calendar1.get(Calendar.MONTH) - calendar2.get(Calendar.MONTH); int day = calendar1.get(Calendar.DAY_OF_MONTH) - calendar2.get(Calendar.DAY_OF_MONTH); //按天然天推算,如:本月25号,到下月5号,只相差10天(按30天计算),不足一个月,须要减一个月 //大于1,是由于按天,一个月从1号到30号算一个完整月,到下个月1号,已经多了一天 //说明,day2在day1的前面2天,相差的天数,不足一个月,如:本月25号到下月24号为一个完整天然月; if (day > 1){ return year * 12 + month - 1; } return year * 12 + month; } //相差天数 public static long differDay(Date date1, Date date2){ long time = date1.getTime() - date2.getTime(); return time / (1000*60*60*24); } //是否同一天,无论时分秒 public static boolean isSameDay(Date date1, Date date2){ Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6); } //是否同一天,毫秒级 public static boolean isSameInstant(Date date1, Date date2){ return date1.getTime() == date2.getTime(); } //一周中的第几天,默认从周日(0)开始计算 public static int getWeek(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.DAY_OF_WEEK); } //一年中的第几个季度 public static int getSeason(Date date) { int season = 1; Calendar c = Calendar.getInstance(); c.setTime(date); int month = c.get(Calendar.MONTH); switch (month) { case Calendar.JANUARY: case Calendar.FEBRUARY: case Calendar.MARCH: season = 1; break; case Calendar.APRIL: case Calendar.MAY: case Calendar.JUNE: season = 2; break; case Calendar.JULY: case Calendar.AUGUST: case Calendar.SEPTEMBER: season = 3; break; case Calendar.OCTOBER: case Calendar.NOVEMBER: case Calendar.DECEMBER: season = 4; break; } return season; } public static void main(String[] args) { System.out.println(getYear()+"\t"+getMonth()+"\t"+getDay()); System.out.println(getTimeToLong()); System.out.println(getTimeToLong("2019-01-12 22:10:01")); System.out.println(getTimeToLong("2019/01/12 22:10:01")); System.out.println(getTimeToLong(new Date())); System.out.println(getTimeStr(new Date(),HH_MM_SS)); System.out.println(addDay(-13)); System.out.println(addMillisecond(15000)); System.out.println(getTimeStr(addDayDate(-5))); System.out.println(differDay(getTime("2019-06-25 20:00:00"), getTime("2019-06-20 21:59:59"))); System.out.println(differYear(getTime("2019-06-25 20:00:00"), getTime("2017-06-26 21:59:59"))); System.out.println(getWeek(new Date())); } }
说明:学习
作过项目的人都知道,不少写过的可重复利用的代码块或有用的工具类没有怎么整理,当须要的时候,又得打开项目查找一翻,虽然功能开发不难,可是又得花时间成本去写去测试,这样的重复造轮子的事情太屡次了;所以不如把轮子保留,供你们一块儿使用;测试
1.这个轮子能够有:须要使用的时候确实还不存在这个组件。
2.我须要的时候轮子不在:每一种技术或工具产生都有它的项目背景,当代码写在项目里的时候,我知道有这个东西,当换了一个项目或公司后,没有备份也没有记录,这个时候你不在了,又得花时间手打一遍;
3.我不知道是否是造轮子:大多数状况下初学者很难分清楚本身是否是在重复造轮子,事实上造轮子不是我目的。个人目的是完成工做任务,任务完成的速度越快越好,质量越高越好。而不是去判断本身在不在造轮子。
4.不想重复花时间造轮子:有时候还会碰到一些并不困难可是很占时间的东西,固然有现成的轮子是花时间最少的;
5.我就是想学习轮子:初学者的并非在重复造轮子,而是学习后以提升为本身的知识与技能。code
轮子有过测试,但不免有失误,若有错误处,还敬请指出;orm