java时间工具类

package com.donghui.oa.util;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.TimeZone;

import org.apache.commons.lang.StringUtils;

/**

* 时间工具类

*

* @author Fangpc

*

*/

public class DateUtils{

  /** 定义常量 **/

  public static final StringDATE_JFP_STR ="yyyyMM";

public static final StringDATE_COLS_STR ="yyyyMMdd";

public static final StringDATE_FULL_STR ="yyyy-MM-dd HH:mm:ss";

public static final StringDATE_SMALL_STR ="yyyy-MM-dd";

public static final StringDATE_KEY_STR ="yyMMddHHmmss";

public static final StringDATETIME_KEYS_STR ="yyMMddHHmmssSSS";

public static final StringDATE_FORMAT_ONE ="yyyy.MM.dd";

public static final StringDATE_FORMAT_TWO ="yyyy-MM-dd";

// 一天的毫秒数86400000 = 24*60*60*1000;

  private static final int millisPerDay =86400000;

// 一小时的毫秒数3600000 = 24*60*60*1000;

  private static final int millisPerHour =3600000;

/**

    * 格式化时间

    *

    * @param strDate

    * @return

    */

  public static String format(Date strDate) {

      SimpleDateFormat format =new SimpleDateFormat(DATE_FULL_STR);

return format.format(strDate);

}

  /**

    * 格式化时间

    *

    * @param strDate

    * @return

    */

  public static String format(Date strDate, String pattern) {

      SimpleDateFormat format =new SimpleDateFormat(pattern);

return format.format(strDate);

}

  /**

    * 使用预设格式提取字符串日期

    *

    * @param strDate

    *            日期字符串

    * @return

    */

  public static Date parse(String strDate) {

      return parse(strDate,DATE_FULL_STR);

}

  /**

    * 使用用户格式提取字符串日期

    *

    * @param strDate

    *            日期字符串

    * @param pattern

    *            日期格式

    * @return

    */

  public static Date parse(String strDate, String pattern) {

      SimpleDateFormat df =new SimpleDateFormat(pattern);

try {

        return df.parse(strDate);

} catch (ParseException e) {

        e.printStackTrace();

return null;

}

}

  /**

    * 两个时间比较

    *

    * @param date1

    * @return

    */

  public static int compareDateWithNow(Date date1) {

      Date date2 =new Date();

int rnum = date1.compareTo(date2);

return rnum;

}

  /**

    * 两个时间比较(时间戳比较)

*

    * @param date1

    * @return

    */

  public static int compareDateWithNow(long date1) {

      long date2 =dateToUnixTimestamp();

if (date1 > date2) {

        return 1;

} else if (date1 < date2) {

        return -1;

} else {

        return 0;

}

}

  /**

    * 二个时间比较()

*

    * @param DATE1

    * @param DATE2

    * @return 1:前面大于后面

    */

  public static int compareDate(String DATE1, String DATE2) {

      DateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

        Date dt1 = df.parse(DATE1);

Date dt2 = df.parse(DATE2);

if (dt1.getTime() > dt2.getTime()) {

            return 1;

} else if (dt1.getTime() < dt2.getTime()) {

            return -1;

} else {

            return 0;

}

      } catch (Exception exception) {

        exception.printStackTrace();

}

      return 0;

}

  /**

    * 计算时间差 (时间单位,开始时间,结束时间) 调用方法 howLong("h","2007-08-09 10:22:26","2007-08-09

    * 20:21:30") ///9小时56分 返回9小时

    */

  public static long howLong(String unit, String time1, String time2) throws ParseException{

      // 时间单位(如:不足1天(24小时) 则返回0),开始时间,结束时间

      Date date1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time1);

Date date2 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time2);

long ltime = date1.getTime() - date2.getTime() <0 ? date2.getTime() - date1.getTime()

            : date1.getTime() - date2.getTime();

if ("s".equals(unit)) {

        return ltime /1000;// 返回秒

      } else if ("m".equals(unit)) {

        return ltime /60000;// 返回分钟

      } else if ("h".equals(unit)) {

        return ltime /millisPerHour;// 返回小时

      } else if ("d".equals(unit)) {

        return ltime /millisPerDay;// 返回天数

      } else {

        return 0;

}

}

  /**

    * 获取系统当前时间

    *

    * @return

    */

  public static String getNowTime() {

      SimpleDateFormat df =new SimpleDateFormat(DATE_FULL_STR);

return df.format(new Date());

}

  /**

    * 获取系统当前时间

    *

    * @return

    */

  public static String getNowTime(String type) {

      SimpleDateFormat df =new SimpleDateFormat(type);

return df.format(new Date());

}

  /**

    * 获取系统当前计费期

    *

    * @return

    */

  public static String getJFPTime() {

      SimpleDateFormat df =new SimpleDateFormat(DATE_JFP_STR);

return df.format(new Date());

}

  /**

    * 将指定的日期转换成Unix时间戳

    *

    * @param date

    *            date 需要转换的日期 yyyy-MM-dd HH:mm:ss

    * @return long 时间戳

    */

  public static long dateToUnixTimestamp(String date) {

      long timestamp =0;

try {

        timestamp =new SimpleDateFormat(DATE_FULL_STR).parse(date).getTime();

} catch (ParseException e) {

        e.printStackTrace();

}

      return timestamp;

}

  /**

    * 将指定的日期转换成Unix时间戳

    *

    * @param dateFormat

    *            date 需要转换的日期 yyyy-MM-dd

    * @return long 时间戳

    */

  public static long dateToUnixTimestamp(String date, String dateFormat) {

      long timestamp =0;

try {

        timestamp =new SimpleDateFormat(dateFormat).parse(date).getTime();

} catch (ParseException e) {

        e.printStackTrace();

}

      return timestamp;

}

  /**

    * 将当前日期转换成Unix时间戳

    *

    * @return long 时间戳

    */

  public static long dateToUnixTimestamp() {

      long timestamp = System.currentTimeMillis();

return timestamp;

}

  /**

    * 将Unix时间戳转换成日期

    *

    * @param timestamp

    *            timestamp 时间戳

    * @return String 日期字符串

    */

  public static String unixTimestampToDate(long timestamp) {

      if (timestamp ==0) {

        return null;

}

      SimpleDateFormat sd =new SimpleDateFormat(DATE_FULL_STR);

sd.setTimeZone(TimeZone.getTimeZone("GMT+8"));

return sd.format(new Date(timestamp));

}

  /**

    * 获取本月最后一天

    *

    * @return

    */

  public static String getDateByMonth(String dateType) {

      Calendar calendar = Calendar.getInstance();

// 设置时间,当前时间不用设置

      // calendar.setTime(new Date());

      // 设置日期为本月最大日期

      calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));

SimpleDateFormat format =new SimpleDateFormat(dateType);

return format.format(calendar.getTime());

}

  /**

    * 当月第一天

    *

    * @return

    */

  public static String getFirstDay(String dateType) {

      SimpleDateFormat format =new SimpleDateFormat(dateType);

Calendar calendar = Calendar.getInstance();

Date theDate = calendar.getTime();

GregorianCalendar gcLast =(GregorianCalendar) Calendar.getInstance();

gcLast.setTime(theDate);

gcLast.set(Calendar.DAY_OF_MONTH,1);

return format.format(gcLast.getTime());

}

  /**

    * 时间相加

    * @param beginTime

    * @param minute

    * @return

    */

  public static Date addMinuteTime(Date beginTime, Integer minute) {

      Calendar cal = Calendar.getInstance();

cal.setTime(beginTime);

cal.add(Calendar.MINUTE, minute);

Date endTime = cal.getTime();

return endTime;

}

  /**

    * 获取本周的周一 或周五 true 周一 false 周五

    *

    * @param isStart

    * @return

    */

  public static Date getWeekDay(boolean isStart) {

      Calendar clen = Calendar.getInstance();

clen.add(Calendar.DAY_OF_MONTH,7);

return getLastWeekDay(isStart, clen.getTime());

}

  /**

    * 获取上周的周一或周五

    *

    * @param isStart

    * @param date

    * @return

    */

  public static Date getLastWeekDay(boolean isStart, Date date) {

      Calendar clen = Calendar.getInstance();

if (date !=null) {

        clen.setTime(date);

}

      clen.add(Calendar.DAY_OF_MONTH, -7);

int ss = clen.get(Calendar.DAY_OF_WEEK);

if (!isStart) {

        clen.add(Calendar.DAY_OF_MONTH, -(ss -6));

return clen.getTime();

}

      clen.add(Calendar.DAY_OF_MONTH, -(ss -2));

return clen.getTime();

}

  public static Date timeToZero(Date date) {

      Calendar clen = Calendar.getInstance();

if (date !=null) {

        clen.setTime(date);

}

      clen.set(Calendar.HOUR_OF_DAY,0);

clen.set(Calendar.MINUTE,0);

clen.set(Calendar.SECOND,0);

return clen.getTime();

}

  public static Date timeToMax(Date date) {

      Calendar clen = Calendar.getInstance();

if (date !=null) {

        clen.setTime(date);

}

      clen.set(Calendar.HOUR_OF_DAY,23);

clen.set(Calendar.MINUTE,59);

clen.set(Calendar.SECOND,59);

return clen.getTime();

}

  /**

    * 检查指定时间是否为周末

    *

    * @param date

    * @return

    */

  public static boolean dateIsWeekend(Date date) {

      boolean bool =false;

try {

        Calendar cal = Calendar.getInstance();

cal.setTime(new Date());

if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY

              || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {

            bool =true;

}

      } catch (Exception e) {

        e.printStackTrace();

}

      return bool;

}

  /**

    * 获取下一年的日期

    *

    * @param dateType

    * @return

    */

  public static String getLastYear(String firstDay, String dateType) {

      SimpleDateFormat format =new SimpleDateFormat(dateType);

Calendar calendar =new GregorianCalendar();

try {

        calendar.setTime(format.parse(firstDay));

calendar.add(Calendar.YEAR,1);// 把日期往后增加一年.整数往后推,负数往前移动

        calendar.add(Calendar.DATE, -1);// 把日期在往后减一天

      } catch (ParseException e) {

        e.printStackTrace();

}

      return format.format(calendar.getTime());

}

  /**

    * 毫秒转换天数 mss 毫秒数

    */

  public static String stmpToDate(Long mss) {

      int days =(int) (mss /(1000 *60 *60 *24));

int hours =(int) ((mss %(1000 *60 *60 *24)) /(1000 *60 *60));

int minutes =(int) ((mss %(1000 *60 *60)) /(1000 *60));

return (days >0 ?(days +" 天 ") :"") +(hours >0 ?(hours +" 小时 ") :"") + minutes +" 分钟 ";

}

  /**

    * 计算两个时间间隔

    *

    * @param str1

    * @param str2

    * @return

    */

  public static String getDistanceTime(String str1, String str2) {

      DateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date one;

Date two;

long day =0;

long hour =0;

long min =0;

long sec =0;

try {

        one = df.parse(str1);

two = df.parse(str2);

long time1 = one.getTime();

long time2 = two.getTime();

long diff;

if (time1 < time2) {

            diff = time2 - time1;

} else {

            diff = time1 - time2;

}

        day = diff /(24 *60 *60 *1000);

hour =(diff /(60 *60 *1000) - day *24);

min =((diff /(60 *1000)) - day *24 *60 - hour *60);

sec =(diff /1000 - day *24 *60 *60 - hour *60 *60 - min *60);

} catch (ParseException e) {

        e.printStackTrace();

}

      // return day + "天" + hour + "小时" + min + "分" + sec + "秒";

      return day +"天" + hour +"小时" + min +"分";

}

  /**

    * 指定时间到当前时间的间隔

    *

    * @param str1

    * @return

    */

  public static long curentTimeDiffMin(String str1) {

      if(StringUtils.isBlank(str1)){

        return 0;

}

      DateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date one;

long min =0;

try {

        one = df.parse(str1);

long time1 = one.getTime();

long time2 =new Date().getTime();

long diff;

if (time1 < time2) {

            diff = time2 - time1;

} else {

            diff = time1 - time2;

}

        min = diff /(60 *1000);

} catch (ParseException e) {

        e.printStackTrace();

}

      return min;

}

  /**

    * 两个日期时间的间隔

    *

    * @param str1

    * @param str2

    * @return

    */

  public static long twoTimeDiffMin(String str1, String str2) {

      DateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date one;

Date two;

long min =0;

try {

        one = df.parse(str1);

two = df.parse(str2);

long time1 = one.getTime();

long time2 = two.getTime();

long diff;

if (time1 < time2) {

            diff = time2 - time1;

} else {

            diff = time1 - time2;

}

        min = diff /(60 *1000);

} catch (ParseException e) {

        e.printStackTrace();

}

      return min;

}

  /**

    *  num  为正数 往后多少天    负数  往前多少天

    *  dateType  时间格式

    */

  public static String getNewDay(int num,String dateType){

      if(StringUtils.isEmpty(dateType)){

        dateType=DateUtils.DATE_SMALL_STR;

}

      Date date=new Date();//取时间

      Calendar calendar =new GregorianCalendar();

calendar.setTime(date);

calendar.add(Calendar.DATE,num);//把日期往后增加指定天.整数往后推,负数往前移动

      date=calendar.getTime();//这个时间就是日期往后推一天的结果

      SimpleDateFormat formatter =new SimpleDateFormat(dateType);

String dateString = formatter.format(date);

return dateString;

}

  /**

    * 获取上N个月最后一天

    * @return

    */

  public static Date getLastDateByMonth(int n){

      Calendar calEnd = Calendar.getInstance();

calEnd.setTime(new Date());

calEnd.add(Calendar.MONTH, -(n-1));

calEnd.set(Calendar.DAY_OF_MONTH,0);//设置为0号,本月的第0天就是上个月的最后一天

      return  calEnd.getTime();

}

    /**

    * 获取上N个月第一天

    * @return

    */

  public static Date getFirstDateDay(int n) {

      Calendar calBegin = Calendar.getInstance();

calBegin.setTime(new Date());

calBegin.add(Calendar.MONTH, -n);

calBegin.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天

        return  calBegin.getTime();

}

  public static void main(String[] args) {

//    DateUtils.format(DateUtils.getFirstDateDay(j),DateUtils.DATE_SMALL_STR)+" 00:00:01"

//    DateUtils.format(DateUtils.getLastDateByMonth(j),DateUtils.DATE_SMALL_STR)+" 23:59:59"

      System.out.println(DateUtils.format(DateUtils.getFirstDateDay(1),DateUtils.DATE_SMALL_STR)+" 00:00:01");

System.out.println(DateUtils.format(DateUtils.getLastDateByMonth(1),DateUtils.DATE_SMALL_STR)+" 23:59:59");

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342