处理日期的工具类

 取的某个月的第一天或者最后一天。好久没写东西了,以前的的,也许会有点用处

  1. package com.iestudio.date;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import com.neusoft.tax.util.codelib.StrUtil;
  8. /**
  9.  * 
  10.  * <p>
  11.  * Title:
  12.  * </p>
  13.  * <p>
  14.  * Description: [处理日期的工具类]
  15.  * </p>
  16.  * <br>
  17.  * <p>
  18.  * Company: 
  19.  * </p>
  20.  * CopyRight 2007-2010
  21.  * 
  22.  * @author 冯贺亮 fenghl@neusoft.com
  23.  * @version Revision: 1.0
  24.  */
  25. /*--------------------------------------------------------
  26.  修改履历:
  27.  2007-10-19 冯贺亮 创建
  28.  ----------------------------------------------------------
  29.  */
  30. public class BaseDate {
  31.     public static final Date nextYearFirstDay(Date innerDate) {
  32.         Calendar calendar = Calendar.getInstance();
  33.         calendar.setTime(curYearLastDay(innerDate));
  34.         calendar.add(Calendar.DATE, 1);
  35.         return calendar.getTime();
  36.     }
  37.     public static final Date nextYearLastDay(Date innerDate) {
  38.         Calendar calendar = Calendar.getInstance();
  39.         calendar.setTime(nextYearFirstDay(nextYearFirstDay(innerDate)));
  40.         calendar.add(Calendar.DATE, -1);
  41.         return calendar.getTime();
  42.     }
  43.     public static final Date curYearFirstDay(Date innerDate) {
  44.         Calendar calendar = Calendar.getInstance();
  45.         calendar.setTime(innerDate);
  46.         calendar.set(Calendar.MONTH, 0);
  47.         calendar.set(Calendar.DATE, 1);
  48.         return calendar.getTime();
  49.     }
  50.     public static final Date curYearLastDay(Date innerDate) {
  51.         Calendar calendar = Calendar.getInstance();
  52.         calendar.setTime(innerDate);
  53.         calendar.set(Calendar.MONTH, 11);
  54.         calendar.set(Calendar.DATE, 31);
  55.         return calendar.getTime();
  56.     }
  57.     public static final Date preYearFirstDay(Date innerDate) {
  58.         return curYearFirstDay(preYearLastDay(innerDate));
  59.     }
  60.     public static final Date preYearLastDay(Date innerDate) {
  61.         Calendar calendar = Calendar.getInstance();
  62.         calendar.setTime(curYearFirstDay(innerDate));
  63.         calendar.add(Calendar.DATE, -1);
  64.         return calendar.getTime();
  65.     }
  66.     public static final Date nextMonthFirstDay(Date innerDate) {
  67.         Calendar calendar = Calendar.getInstance();
  68.         calendar.setTime(curMonthFirstDay(innerDate));
  69.         calendar.add(Calendar.MONTH, 1);
  70.         return calendar.getTime();
  71.     }
  72.     public static final Date nextMonthLastDay(Date innerDate) {
  73.         return curMonthLastDay(nextMonthFirstDay(innerDate));
  74.     }
  75.     public static final Date curMonthFirstDay(Date innerDate) {
  76.         Calendar calendar = Calendar.getInstance();
  77.         calendar.setTime(innerDate);
  78.         calendar.set(Calendar.DATE, 1);
  79.         return calendar.getTime();
  80.     }
  81.     public static final Date curMonthLastDay(Date innerDate) {
  82.         Calendar calendar = Calendar.getInstance();
  83.         calendar.setTime(nextMonthFirstDay(innerDate));
  84.         calendar.add(Calendar.DATE, -1);
  85.         return calendar.getTime();
  86.     }
  87.     public static final Date preMonthFirstDay(Date innerDate) {
  88.         return curMonthFirstDay(preMonthLastDay(innerDate));
  89.     }
  90.     public static final Date preMonthLastDay(Date innerDate) {
  91.         Calendar calendar = Calendar.getInstance();
  92.         calendar.setTime(curMonthFirstDay(innerDate));
  93.         calendar.add(Calendar.DATE, -1);
  94.         return calendar.getTime();
  95.     }
  96.     public static final Date nextQuartarFirstDay(Date innerDate) {
  97.         Calendar calendar = Calendar.getInstance();
  98.         calendar.setTime(curQuartarLastDay(innerDate));
  99.         calendar.add(Calendar.DATE, 1);
  100.         return calendar.getTime();
  101.     }
  102.     public static final Date nextQuartarLastDay(Date innerDate) {
  103.         return curQuartarLastDay(nextQuartarFirstDay(innerDate));
  104.     }
  105.     @SuppressWarnings("deprecation")
  106.  public static final Date curQuartarFirstDay(Date innerDate) {
  107.         Calendar calendar = Calendar.getInstance();
  108.         int month = innerDate.getMonth() + 1;
  109.         calendar.setTime(innerDate);
  110.         if (month >= 1 && month <= 3) {
  111.             calendar.set(Calendar.MONTH, 0);
  112.             calendar.set(Calendar.DATE, 1);
  113.         }
  114.         else if (month >= 4 && month <= 6) {
  115.             calendar.set(Calendar.MONTH, 3);
  116.             calendar.set(Calendar.DATE, 1);
  117.         }
  118.         else if (month >= 7 && month <= 9) {
  119.             calendar.set(Calendar.MONTH, 6);
  120.             calendar.set(Calendar.DATE, 1);
  121.         }
  122.         else if (month >= 10 && month <= 12) {
  123.             calendar.set(Calendar.MONTH, 9);
  124.             calendar.set(Calendar.DATE, 1);
  125.         }
  126.         return calendar.getTime();
  127.     }
  128.     @SuppressWarnings("deprecation")
  129.     public static final Date curQuartarLastDay(Date innerDate) {
  130.         Calendar calendar = Calendar.getInstance();
  131.         int month = innerDate.getMonth() + 1;
  132.         calendar.setTime(innerDate);
  133.         if (month >= 1 && month <= 3) {
  134.             calendar.set(Calendar.MONTH, 2);
  135.             calendar.set(Calendar.DATE, 31);
  136.         }
  137.         else if (month >= 4 && month <= 6) {
  138.             calendar.set(Calendar.MONTH, 5);
  139.             calendar.set(Calendar.DATE, 30);
  140.         }
  141.         else if (month >= 7 && month <= 9) {
  142.             calendar.set(Calendar.MONTH, 8);
  143.             calendar.set(Calendar.DATE, 30);
  144.         }
  145.         else if (month >= 10 && month <= 12) {
  146.             calendar.set(Calendar.MONTH, 11);
  147.             calendar.set(Calendar.DATE, 31);
  148.         }
  149.         return calendar.getTime();
  150.     }
  151.     public static final Date preQuartarFirstDay(Date innerDate) {
  152.         return curQuartarFirstDay(preQuartarLastDay(innerDate));
  153.     }
  154.     public static final Date preQuartarLastDay(Date innerDate) {
  155.         Calendar calendar = Calendar.getInstance();
  156.         calendar.setTime(curQuartarFirstDay(innerDate));
  157.         calendar.add(Calendar.DATE, -1);
  158.         return calendar.getTime();
  159.     }
  160.     public static final Date getNextYear(Date date) {
  161.         Calendar c = Calendar.getInstance();
  162.         c.setTime(date);
  163.         c.add(Calendar.YEAR, 1);
  164.         c.setTime(c.getTime());
  165.         c.add(Calendar.DATE, -1);
  166.         return c.getTime();
  167.     }
  168.     public static final Date getPreYear(Date date) {
  169.         Calendar c = Calendar.getInstance();
  170.         c.setTime(date);
  171.         c.add(Calendar.YEAR, -1);
  172.         c.setTime(c.getTime());
  173.         c.add(Calendar.DATE, 1);
  174.         return c.getTime();
  175.     }
  176.     /**
  177.      *
  178.      *
  179.      *isLeapYear = function (innerDate):判断是否为闰年
  180.      *
  181.      */
  182.     /**
  183.      * <p>
  184.      * Discription:将传入的YYYY-MM-DD形式的字符串转换为Date类型,如果传入字符串为空则返回null
  185.      * </p>
  186.      * 
  187.      * @param strDate
  188.      * @return
  189.      * @author:[冯贺亮]
  190.      * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
  191.      */
  192.     public static Date parseDate(String strDate) {
  193.         if (!StrUtil.isEmpty(strDate)) {
  194.             return parseDate(strDate, 3);
  195.         }
  196.         else {
  197.             return null;
  198.         }
  199.     }
  200.     /**
  201.      * 将String类型数据转化成Date数据类型
  202.      * @param dateStr
  203.      * @param index
  204.      * 其中index表示dateStr类型格式:<br>
  205.      * 0: "yyyy-MM-dd HH:mm:ss"<br>
  206.      * 1: "yyyy/MM/dd HH:mm:ss"<br>
  207.      * 2: "yyyy年MM月dd日HH时mm分ss秒"<br>
  208.      * 3: "yyyy-MM-dd"<br>
  209.      * 4: "yyyy/MM/dd"<br>
  210.      * 5: "yy-MM-dd"<br>
  211.      * 6: "yy/MM/dd"<br>
  212.      * 7: "yyyy年MM月dd日"<br>
  213.      * 8: "HH:mm:ss"<br>
  214.      * 9: "yyyyMMddHHmmss"<br>
  215.      * 10: "yyyyMMdd"<br>
  216.      * 11: "yyyy.MM.dd"<br>
  217.      * 12: "yy.MM.dd"<br>
  218.      * @return
  219.      */
  220.     public static Date parseDate(String dateStr, int index) {
  221.         DateFormat df = null;
  222.         df = new SimpleDateFormat(dateFormat[index]);
  223.         try {
  224.             return df.parse(dateStr);
  225.         }
  226.         catch (ParseException e) {
  227.             e.printStackTrace();
  228.             return null;
  229.         }
  230.     }
  231.     /**
  232.      * 将Date类型数据转化成String数据类型
  233.      * @param date
  234.      * @param index
  235.      * 其中index表示Date类型格式:<br>
  236.      * 0: "yyyy-MM-dd HH:mm:ss"<br>
  237.      * 1: "yyyy/MM/dd HH:mm:ss"<br>
  238.      * 2: "yyyy年MM月dd日HH时mm分ss秒"<br>
  239.      * 3: "yyyy-MM-dd"<br>
  240.      * 4: "yyyy/MM/dd"<br>
  241.      * 5: "yy-MM-dd"<br>
  242.      * 6: "yy/MM/dd"<br>
  243.      * 7: "yyyy年MM月dd日"<br>
  244.      * 8: "HH:mm:ss"<br>
  245.      * 9: "yyyyMMddHHmmss"<br>
  246.      * 10: "yyyyMMdd"<br>
  247.      * 11: "yyyy.MM.dd"<br>
  248.      * 12: "yy.MM.dd"<br>
  249.      * @return
  250.      */
  251.     public static String parseDate(Date date, int index) {
  252.         DateFormat df = null;
  253.         df = new SimpleDateFormat(dateFormat[index]);
  254.         return df.format(date);
  255.     }
  256.     private static String dateFormat[] = { "yyyy-MM-dd HH:mm:ss",
  257.             "yyyy/MM/dd HH:mm:ss""yyyy年MM月dd日HH时mm分ss秒""yyyy-MM-dd",
  258.             "yyyy/MM/dd""yy-MM-dd""yy/MM/dd""yyyy年MM月dd日""HH:mm:ss",
  259.             "yyyyMMddHHmmss""yyyyMMdd""yyyy.MM.dd""yy.MM.dd" };
  260.     /**
  261.      * <p>
  262.      * Discription:返回相差年数
  263.      * </p>
  264.      */
  265.     public final static String TYPE_YEAR = "year";
  266.     /**
  267.      * <p>
  268.      * Discription:返回相差月份
  269.      * </p>
  270.      */
  271.     public final static String TYPE_MONTH = "month";
  272.     /**
  273.      * <p>
  274.      * Discription:返回相差天数
  275.      * </p>
  276.      */
  277.     public final static String TYPE_DAY = "day";
  278.     /**
  279.      * <p>
  280.      * Discription:返回相差周数
  281.      * </p>
  282.      */
  283.     public final static String TYPE_WEEK = "week";
  284.     /**
  285.      * 
  286.      * <p>
  287.      * Discription:计算两个日期间的相差的天数、周数、月份、年数
  288.      * </p>
  289.      * 
  290.      * @param strDate
  291.      *            开始时间
  292.      * @param endDate
  293.      *            结束时间
  294.      * @param format
  295.      *            传入日期的格式
  296.      * @param type
  297.      *            返回类型 day :相差日期 week:相差星期 month:相差月份 year:相差年数 不区分大小写
  298.      * @return int 如果传入type类型不正确返回0
  299.      * @throws ParseException
  300.      *             String日期转date型日期 需要用到SimpleDateFormat.parse 可能会出现异常
  301.      * @author:冯贺亮
  302.      * @update:日期YYYY-MM-DD 更改人姓名 变更描述
  303.      */
  304.     public static int getDateDifference(Object strDate, Object endDate,
  305.             String format, String type) throws ParseException {
  306.         SimpleDateFormat df = new SimpleDateFormat(format);
  307.         Date date1 = null;
  308.         Date date2 = null;
  309.         if (strDate instanceof String) {
  310.             date1 = df.parse((String) strDate);
  311.         }
  312.         else if (strDate instanceof Date) {
  313.             date1 = (Date) strDate;
  314.         }
  315.         else {
  316.             return 0;
  317.         }
  318.         if (endDate instanceof String) {
  319.             date2 = df.parse((String) endDate);
  320.         }
  321.         else if (endDate instanceof Date) {
  322.             date2 = (Date) endDate;
  323.         }
  324.         else {
  325.             return 0;
  326.         }
  327.         Calendar cal1 = null;
  328.         Calendar cal2 = null;
  329.         cal1 = Calendar.getInstance();
  330.         cal2 = Calendar.getInstance();
  331.         cal1.setTime(date1);
  332.         cal2.setTime(date2);
  333.         long ldate1 = date1.getTime() + cal1.get(Calendar.ZONE_OFFSET)
  334.                 + cal1.get(Calendar.DST_OFFSET);
  335.         long ldate2 = date2.getTime() + cal2.get(Calendar.ZONE_OFFSET)
  336.                 + cal2.get(Calendar.DST_OFFSET);
  337.         int hr1 = (int) (ldate1 / (60 * 60 * 1000));
  338.         int hr2 = (int) (ldate2 / (60 * 60 * 1000));
  339.         int days1 = (int) hr1 / 24;
  340.         int days2 = (int) hr2 / 24;
  341.         int dateDiff = days2 - days1;
  342.         int weekOffset = (cal2.get(Calendar.DAY_OF_WEEK) - cal1
  343.                 .get(Calendar.DAY_OF_WEEK)) < 0 ? 1 : 0;
  344.         int weekDiff = dateDiff / 7 + weekOffset;
  345.         int yearDiff = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR);
  346.         int monthDiff = yearDiff * 12 + cal2.get(Calendar.MONTH)
  347.                 - cal1.get(Calendar.MONTH);
  348.         if ("day".equalsIgnoreCase(type)) {
  349.             return dateDiff;
  350.         }
  351.         else if ("week".equalsIgnoreCase(type)) {
  352.             return weekDiff;
  353.         }
  354.         else if ("month".equalsIgnoreCase(type)) {
  355.             return monthDiff;
  356.         }
  357.         else if ("year".equalsIgnoreCase(type)) {
  358.             return yearDiff;
  359.         }
  360.         else {
  361.             return 0;
  362.         }
  363.     }
  364. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值