package com.autoserve.mh.common.util;
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class DateUtil {
 
 /**
  * format格式:yyyyMMddHHmmssSSS
  */
 public static SimpleDateFormat FORMAT1 = new SimpleDateFormat(
   "yyyyMMddHHmmssSSS");
 
 /**
  * format格式:yyyy-MM-dd HH:mm:ss
  */
 public static SimpleDateFormat FORMAT2 = new SimpleDateFormat(
   "yyyy-MM-dd HH:mm:ss");
 
 /**
  * format格式:yyyy-MM-dd
  */
 public static SimpleDateFormat FORMAT3 = new SimpleDateFormat("yyyy-MM-dd");
 
 /**
  * format格式:yyyyMMdd
  */
 public static SimpleDateFormat FORMAT4 = new SimpleDateFormat("yyyyMMdd");
 
 /**
  * 正则判断是否日期格式(yyyy-mm-dd)
  */
 public static Pattern pat = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))");
 
 /**
  * 获取当前时间
  *
  * @return
  */
 public static Date getCurrentTime() {
  return Calendar.getInstance().getTime();
 }
 
 /**
  * 获取当前时间格式yyyyMMddHHmmssSSS 的时间
  *
  * @return
  */
 public static String getCurrentTimeStrMill() {
  return FORMAT1.format(getCurrentTime());
 }
 
 /**
  * 获取当前时间格式 yyyy-MM-dd HH:mm:ss 的时间
  *
  * @return
  */
 public static String getCurrentTimeStr() {
  return FORMAT2.format(getCurrentTime());
 }
 
 /**
  * 获取当前时间格式 yyyy-MM-dd 的时间
  *
  * @return
  */
 public static String getCurrentDateStr(Date date) {
  return FORMAT3.format(getCurrentTime());
 }
 
 /**
  * 当前时间+num个月的时间
  *
  * @return
  */
 public static Date monthAdd(int num) {
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.MONTH, num);
  return cal.getTime();
 }
 
 /**
  * 判断两个日期的大小(只比较yyyy-MM-dd形式,忽略时分秒)
  * <p>
  * dt1的日期(如2015-10-06)在dt2(如2015-06-05)之前返回1,之后返回-1,否则返回0
  * </p>
  *
  * @return
  */
 public static int compareDate(Date dt1, Date dt2) {
 
  String[] dtStr1 = FORMAT3.format(dt1).split("-");
  Calendar cal1 = Calendar.getInstance();
  cal1.set(Integer.valueOf(dtStr1[0]), Integer.valueOf(dtStr1[1]),
    Integer.valueOf(dtStr1[2]), 0, 0, 0);
 
  String[] dtStr2 = FORMAT3.format(dt2).split("-");
  Calendar cal2 = Calendar.getInstance();
  cal2.set(Integer.valueOf(dtStr2[0]), Integer.valueOf(dtStr2[1]),
    Integer.valueOf(dtStr2[2]), 0, 0, 0);
  // 获取日期的long值
  if (cal1.getTime().getTime() > cal2.getTime().getTime()) {
   return 1;
  } else if (cal1.getTime().getTime() < cal2.getTime().getTime()) {
   return -1;
  } else {
   return 0;
  }
 }
 
 /**
  * 判断当前日期与传入日期之间相差的天数(只比较yyyy-MM-dd形式,忽略时分秒)
  * <p>
  * 当前日期(如2015-10-06),传入日期(如2015-10-01),则返回-5
  * </p>
  *
  * @return
  */
 public static int downDate(Date dt1) {
 
        // 超出日数计算
        int day = 0;
        try {
            String shdStr = FORMAT3.format(dt1);
            String today = FORMAT3.format(DateUtil.getCurrentTime());
       
            Calendar cal = Calendar.getInstance();
            cal.setTime(FORMAT3.parse(shdStr));
            long shdTime = cal.getTimeInMillis();
            cal.setTime(FORMAT3.parse(today));
            long todayTime = cal.getTimeInMillis();
            day = Integer.valueOf(String.valueOf((todayTime - shdTime)/(24*3600*1000)));
        } catch (Exception e) {
            e.printStackTrace();
        }
       
        return day;
 }
 
 /**
  * 比较两个日期的相差月份数
  * @param start 开始时间  形如 2015/10/10
  * @param end 结束时间    形如 2016/1/1
  * @return
  */
 public  static  int getMonth(Date start, Date end) {
        if (start.after(end)) {
            Date t = start;
            start = end;
            end = t;
        }
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(start);
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(end);
        Calendar temp = Calendar.getInstance();
        temp.setTime(end);
        temp.add(Calendar.DATE, 1);
 
        int year = endCalendar.get(Calendar.YEAR)
                - startCalendar.get(Calendar.YEAR);
        int month = endCalendar.get(Calendar.MONTH)
                - startCalendar.get(Calendar.MONTH);
 
        if ((startCalendar.get(Calendar.DATE) == 1)
                && (temp.get(Calendar.DATE) == 1)) {
            return year * 12 + month + 1;
        } else if ((startCalendar.get(Calendar.DATE) != 1)
                && (temp.get(Calendar.DATE) == 1)) {
            return year * 12 + month;
        } else if ((startCalendar.get(Calendar.DATE) == 1)
                && (temp.get(Calendar.DATE) != 1)) {
            return year * 12 + month;
        } else {
            return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
        }
    }
 
}

DateUtil工具类的更多相关文章

  1. 邓博泽 java最全的DateUtil工具类

    package com.kld.yijie.web.util; import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java. ...

  2. 03-自己封装DateUtil工具类

    package com.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.u ...

  3. hutool的DateUtil工具类

    1.0.DateUitl(日期时间) 0)坐标 <dependency> <groupId>cn.hutool</groupId> <artifactId&g ...

  4. hutool包的DateUtil工具类

    [首先引入依赖 ] <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core& ...

  5. JAVA DateUtil 工具类封装(转)

    原文链接 https://blog.csdn.net/wangpeng047/article/details/8295623  作者三次整理后的代码 下载链接   https://www.lanzou ...

  6. JAVA 日期格式工具类DateUtil.java

    DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.ut ...

  7. 日期工具类 - DateUtil.java

    日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...

  8. 使用日期工具类:DateUtil

    利用java开发,避免不了String.Date转换,前一天.后一天等问题.给出一个工具类,仅供学习交流. import java.text.DateFormat; import java.text. ...

  9. android 工具类 DateUtil

    提取了一些在开发过程中可能会用到的日期相关的函数作为工具类.供大家參考: /** * 日期操作工具类. * * @author shimiso */ public class DateUtil { p ...

随机推荐

  1. python虚拟机中的异常流控制

    异常:对程序运行中的非正常情况进行抽象.并且提供相应的语法结构和语义元素,使得程序员能够通过这些语法结构和语义元素来方便地描述异常发生时的行为. 1.Python中的异常机制: 1.1Python虚拟 ...

  2. python基础一

    1.1 Python优点 1.简单.优雅.明确 2.强大的模块三方库 3.易移植 4.面向对象 5.可扩展(c\java\c#...) 1.2 Python缺点 1.代码不能加密 2.速度慢   1. ...

  3. C#中的日期处理函数

    C#中的日期处理函数 //2013年4月24日 this.TextBox6.Text = System.DateTime.Now.ToString("D"); //2013-4-2 ...

  4. Sublime Text永久设置使用4个空格缩进

    Sublime Text是一款轻量高效的代码编辑器,官网地址是:http://www.sublimetext.com/,默认情况下sublime是使用tab进行缩进,如果手动敲空格是比较麻烦的,并且很 ...

  5. 【转】Drawable /Bitmap、String/InputStream、Bitmap/byte[]

    原文:http://wuxiaolong.me/2015/08/10/Drawable-to-Bitmap/ Drawable互转Bitmap Drawable转Bitmap 1234 Resourc ...

  6. Java GridBagLayout 简单使用

    这里只介绍了很基础布局构建及使用,主要是关于 GridBagLayout. 首先整套流程大概是, 声明一个 GridBagLayout 对象 private GridBagLayout gridBag ...

  7. 整合Spring、SpringMVC、MyBatis

    spring+springmvc+mybatis集成 一个核心:将对象交给spring管理. 1新建web项目 2添加项目jar包 spring包见上一篇博客 3建立项目的目录结构 4完成Mapper ...

  8. unity3d编辑器——检视面板部分(一)

    最近在学习unity编辑器,so,记录总结一下. 以下介绍了一些简单的unity3d检视面板部分的使用技巧. using UnityEngine; using System.Collections; ...

  9. redis-3.2.5 make 报错

    make[]: Entering directory `/usr/local/src/redis-/src' CC adlist.o In file included : zmalloc.h::: e ...

  10. 【转载】scribe、chukwa、kafka、flume日志系统对比

    原文地址:http://www.ttlsa.com/log-system/scribe-chukwa-kafka-flume-log-system-contrast/ 1. 背景介绍许多公司的平台每天 ...