package edu.gdut.imis.commodity.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtils { public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); long time1 = new Date().getTime(); long time2 = sdf.parse("2014-03-01").getTime(); System.out.println(getFieldDifference(time1, time2, Calendar.YEAR)); System.out.println(getFieldDifference(time1, time2, Calendar.MONTH)); System.out.println(getFieldDifference(time1, time2, Calendar.DATE)); System.out.println(sdf.format(addDay( new Timestamp(new Date().getTime()), 20))); } public static int getFieldDifference(long time1, long time2, int field) { if (time1 == time2) { return 0; } else if (time1 > time2) { return -getFieldDifference(time2, time1, field); } Calendar cal1 = Calendar.getInstance(); cal1.setLenient(false); cal1.setTimeInMillis(time1); Calendar cal2 = Calendar.getInstance(); cal2.setLenient(false); cal2.setTimeInMillis(time2); for (int x = 0; x < Calendar.FIELD_COUNT; x++) { if (x > field) { cal1.clear(x); cal2.clear(x); } } time1 = cal1.getTimeInMillis(); time2 = cal2.getTimeInMillis(); long ms = 0; int min = 0, max = 1; while (true) { cal1.setTimeInMillis(time1); cal1.add(field, max); ms = cal1.getTimeInMillis(); if (ms == time2) { min = max; break; } else if (ms > time2) { break; } else { max <<= 1; } } while (max > min) { cal1.setTimeInMillis(time1); int t = (min + max) >>> 1; cal1.add(field, t); ms = cal1.getTimeInMillis(); if (ms == time2) { min = t; break; } else if (ms > time2) { max = t; } else { min = t; } } return -min; } public static Date formDate(String dateStr) { SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM"); Date date = null; try { date = dd.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } public static boolean isSameMonth(Date d1, Date d2) { if (d1 == null || d2 == null) { return false; } Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(d1); cal2.setTime(d2); int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR); if (subYear == 0) { if (cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH)) return true; } return false; } public static Date lastDayOfMonth(Date date) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); int lastDay = cDay.getActualMaximum(Calendar.DAY_OF_MONTH); cDay.set(Calendar.DAY_OF_MONTH, lastDay); return cDay.getTime(); } public static Date firstDayOfMonth(Date date) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); int firstDay = cDay.getActualMinimum(Calendar.DAY_OF_MONTH); cDay.set(Calendar.DAY_OF_MONTH, firstDay); return cDay.getTime(); } public static Date addDay(Date date, int count) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); cDay.add(Calendar.DATE, count); return cDay.getTime(); } public static Date addMonth(Date date, int count) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); cDay.add(Calendar.MONTH, count); return cDay.getTime(); } public static Calendar addMonthc(Date date, int count) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); cDay.add(Calendar.MONTH, count); return cDay; } public static Date addYear(Date date, int count) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); cDay.add(Calendar.YEAR, count); return cDay.getTime(); } public static int nianxiancha(Date start, Date now) { start = firstDayOfMonth(start); now = firstDayOfMonth(now); Calendar cStart = Calendar.getInstance(); cStart.setTime(start); Calendar cNow = Calendar.getInstance(); cNow.setTime(now); int year = cNow.get(Calendar.YEAR) - cStart.get(Calendar.YEAR); int month = cNow.get(Calendar.MONTH) - cStart.get(Calendar.MONTH); if (month >= 0) { year = year + 1; } return year; } public static Date formDate(String dateStr, String patt){ SimpleDateFormat dd=new SimpleDateFormat(patt); Date date = null; try { date = dd.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } }