package com.ruipos.common.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* 日期时间特殊处理类。<br/>
*
* 类中的方法体都为<i>static</i>方法。
*
* <p>
* 在本类中所说到的format使用格式如下:<br/>
* 年 —— yyyy <br/>
* 月 —— MM <br/>
* 日 —— dd <br/>
* 时 —— HH(24小时制) hh(12小时制)<br/>
* 分 —— mm <br/>
* 秒 —— ss <br/>
* yyyy-MM-dd HH:mm:ss -> "2000-01-01 00:00:01"<br/>
* yMd a h:m:s -> "0011 上午 0:0:1"<br/>
*
* 常用的格式基本如上,如需其它特殊格式请参见{@link SimpleDateFormat}类。<br/>
* 注意区分大小写。
* </p>
*
* @author zhoumin
*/
public class DateUtils
{
/**
* 系统当前日期时间根据指定的格式时行处理后Date类型输出
*
* @param format
*
* @return
*
* @return Date
*
* @throws
* @Title: getFormatCurrentDay
* @author defa.huo
* @time 2016年1月12日 上午11:07:37
*/
public static Date getFormatCurrentDay(String format)
{
return strToDate(getCurrentDay(), format);
}
/**
* 字符串转换为{@link java.util.Date}<br>
*
* @param time 要转换的日期字符串。
* @param format 指定的格式。
*
* @return Date 日期。
*/
public static Date strToDate(String time, String format)
{
try
{
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = sdf.parse(time);
return date;
} catch (Exception e)
{
return null;
}
}
/**
* 获取当前天
*
* @author HUIJIN
*/
public static String getCurrentDay()
{
String str = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
str = sdf.format(new Date());
return str;
}
/**
* <p>
* 系统当前日期时间根据指定的格式时行处理,本方法会根据用户输入的format条件进行格式化,与格式无关的数据不进行转换。
* </p>
*
* @param format 指定的格式。
*
* @return 系统当前日期时间字符串
*/
public static String currDateFormat(String format)
{
Date now = new Date();
SimpleDateFormat f = new SimpleDateFormat(format);
return f.format(now);
}
/**
* 获取当前月的第一天
*
* @return String
*/
public static String getFirstDayOfMonth()
{
String str = "";
try
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar currentDate = Calendar.getInstance();
currentDate.set(Calendar.DATE, 1);// 设为当前月的1号
str = dateFormat.format(currentDate.getTime());
return str;
} catch (Exception e)
{
return str;
}
}
/**
* 获取给定年给定月的最后一天
*
* @param year 给定年
* @param month 给定月
*/
public static String getLastDay(String year, String month)
{
String lastDay = "";
if (year != null && !year.equals("") && month != null
&& !month.equals(""))
{
lastDay = year + month + getDays(year, month);
}
return lastDay;
}
/**
* 获取给定年给定月的天数
*
* @param year 给定年
* @param month 给定月
*/
public static int getDays(String year, String month)
{
int dateOfMonth = 0;
if (year != null && !year.equals("") && month != null
&& !month.equals(""))
{
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.parseInt(year));
cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);// Java月份才0开始算
dateOfMonth = cal.getActualMaximum(Calendar.DATE);
}
return dateOfMonth;
}
/**
* 获取当前天的前两天
*
* @author HUIJIN
*/
public static String getBeforeTwoDay()
{
String str = "";
String currentDate = getCurrentDay();
int intYear = Integer.parseInt(currentDate.substring(0, 4));
int intMonth = Integer.parseInt(currentDate.substring(5, 7));
int intDate = Integer.parseInt(currentDate.substring(8, 10));
Calendar cal = Calendar.getInstance();
cal.set(intYear, intMonth - 1, intDate);
cal.add(Calendar.DATE, -2);
Date date = cal.getTime();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
str = df.format(date);
return str;
}
/**
* 获取当前天的前n天
*
* @param n
*
* @return
*
* @return String
*
* @throws
* @Title: getBeforeDay
* @author defa.huo
* @time 2016年8月10日 上午10:06:01
*/
public static String getBeforeDay(Integer n)
{
String str = "";
String currentDate = getCurrentDay();
int intYear = Integer.parseInt(currentDate.substring(0, 4));
int intMonth = Integer.parseInt(currentDate.substring(5, 7));
int intDate = Integer.parseInt(currentDate.substring(8, 10));
Calendar cal = Calendar.getInstance();
cal.set(intYear, intMonth - 1, intDate);
cal.add(Calendar.DATE, -n);
Date date = cal.getTime();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
str = df.format(date);
return str;
}
/**
* 获取当前天的前n天
*
* @param n
*
* @return
*
* @return String
*
* @throws
* @Title: getBeforeDay
* @author defa.huo
* @time 2016年8月10日 上午10:06:01
*/
public static String getBeforeDay(Integer n, String format)
{
String str = "";
String currentDate = getCurrentDay();
int intYear = Integer.parseInt(currentDate.substring(0, 4));
int intMonth = Integer.parseInt(currentDate.substring(5, 7));
int intDate = Integer.parseInt(currentDate.substring(8, 10));
Calendar cal = Calendar.getInstance();
cal.set(intYear, intMonth - 1, intDate);
cal.add(Calendar.DATE, -n);
Date date = cal.getTime();
DateFormat df = new SimpleDateFormat(format);
str = df.format(date);
return str;
}
/**
* 获取当前天的下一天
*
* @author HUIJIN
*/
public static String getNextDay()
{
String str = "";
String currentDate = getCurrentDay();
int intYear = Integer.parseInt(currentDate.substring(0, 4));
int intMonth = Integer.parseInt(currentDate.substring(5, 7));
int intDate = Integer.parseInt(currentDate.substring(8, 10));
Calendar cal = Calendar.getInstance();
cal.set(intYear, intMonth - 1, intDate);
cal.add(Calendar.DATE, +1);
Date date = cal.getTime();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
str = df.format(date);
return str;
}
@SuppressWarnings("deprecation")
public static Date addDay(Date d, int day)
{
try
{
d.setDate(d.getDate() + day);
return d;
} catch (Exception e)
{
return d;
}
}
@SuppressWarnings("deprecation")
public static Date addMinute(Date d, int minute)
{
try
{
d.setMinutes(d.getMinutes() + minute);
return d;
} catch (Exception e)
{
return d;
}
}
/**
* 根据日期返回ORACLE中标准的TO_DATE()输出字符串。
*
* @param d 日期
*
* @return 字符串
*/
public static String toDate(Date d)
{
return " TO_DATE('" + dateToStr(d, "yyyy-MM-dd HH:mm:ss")
+ "','YYYY-MM-DD HH24:MI:SS')";
}
/**
* 将{@link java.util.Date}类型转换为指定的字符串格式<br>
*
* @param date 要转换的日期。
* @param format 指定的格式。
*
* @return 指定格式日期型字符串。
*/
public static String dateToStr(Date date, String format)
{
SimpleDateFormat f = new SimpleDateFormat(format);
return f.format(date);
}
/**
* 获取当天时间
*
* @param dateformat
*
* @return 当前时间字符串
*
* @author zhoumin E-mail:zhoumin_0810@163.com
*/
public static String getNowTime(String dateformat)
{
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 可以方便地修改日期格式
String nowStr = dateFormat.format(now);
return nowStr;
}
/**
* 获取当前月的最后一天
*
* @return String
*
* @author zhoumin E-mail:zhoumin_0810@163.com
*/
public static String getEndDayOfMonth()
{
String str = "";
Calendar cal = Calendar.getInstance();
SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
cal.set(Calendar.DATE, 1);
cal.roll(Calendar.DATE, -1);
Date endTime = cal.getTime();
str = datef.format(endTime);
return str;
}
/**
* 获取当前上个月的最后一天
*
* @return String
*
* @author kuangguangfeng
*/
public static String getDayLastOfMonth()
{
String str = "";
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
cal.set(Calendar.DATE, 1);
cal.roll(Calendar.DATE, -1);
Date endTime = cal.getTime();
str = datef.format(endTime);
return str;
}
/**
* 当前时间 减去31天
*
* @return
*/
public static String getDayMonth31()
{
String str = "";
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -31);
SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
Date endTime = cal.getTime();
str = datef.format(endTime);
return str;
}
/**
* 当前时间 减去7天
*
* @return
*/
public static String getDayMonth7()
{
String str = "";
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -7);
SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
Date endTime = cal.getTime();
str = datef.format(endTime);
return str;
}
/**
* 获取当前上个月
*
* @return String
*
* @author kuangguangfeng
*/
public static String getLastOfMonth()
{
String str = "";
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM");
cal.set(Calendar.DATE, 1);
cal.roll(Calendar.DATE, -1);
Date endTime = cal.getTime();
str = datef.format(endTime);
return str;
}
/**
* 获取某月的最后一天
*
* @param date 输入的日期
* @param format 输出的格式
*
* @return 该日期对应月份的最后一天日期
*
* @author zhoumin E-mail:zhoumin_0810@163.com
*/
public static String getLastDateOfMonth(Date date, String format)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, cal
.getActualMaximum(Calendar.DAY_OF_MONTH));
return dateToStr(cal.getTime(), format);
}
/**
* 日期比较
*
* @param DATE1
* @param DATE2
*
* @return int
*/
public static int compare_date(String DATE1, String DATE2)
{
if (DATE1.trim().length() == 10)
{
DATE1 = DATE1 + " 00:00:00";
}
if (DATE2.trim().length() == 10)
{
DATE2 = DATE2 + " 00:00:00";
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
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;
}
public static String getWeekStr(Date date)
{
String str = "";
Calendar c = Calendar.getInstance();
c.setTime(date);
int week = c.get(Calendar.DAY_OF_WEEK);
if (week == 1)
{
str = "日";
} else if (week == 2)
{
str = "一";
} else if (week == 3)
{
str = "二";
} else if (week == 4)
{
str = "三";
} else if (week == 5)
{
str = "四";
} else if (week == 6)
{
str = "五";
} else if (week == 7)
{
str = "六";
}
return str;
}
public static int getWeekStr2(Date date)
{
Calendar c = Calendar.getInstance();
c.setTime(date);
int week = c.get(Calendar.DAY_OF_WEEK) - 1;
return week;
}
//设置单据保存天数 ( 如果day为1 则只到 当天晚上的12点)
public static int compareTimeZone(int day)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
long time = 0;
long mTime = 0;
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, day);
String dTime = sdf.format(cal.getTime());
try
{
mTime = sdf.parse(dTime).getTime() / 1000;
time = new Date().getTime() / 1000;
} catch (ParseException e)
{
e.printStackTrace();
}
return (int) (mTime - time);
}
/**
* 根据时间字符串 转换成指定格式的时间字符串
*
* @param time 要转换的时间字符串
* @param format 当前时间字符串格式
* @param format 目标字符串格式
*
* @return
*
* @return Date 返回类型
*
* @author: gaopp
* @date: 2015-1-22 下午04:55:38
*/
public static String strToStr(String time, String format, String format1)
{
try
{
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = sdf.parse(time);
SimpleDateFormat sdf1 = new SimpleDateFormat(format1);
return sdf1.format(date);
} catch (Exception e)
{
return null;
}
}
/**
* 获取时间的下一秒的时间
*
* @param date
*
* @return
*/
public static Date addOneSecond(Date date)
{
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.SECOND, 1);
return calendar.getTime();
}
public static String getLastDay()
{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();//此时打印它获取的是系统当前时间
calendar.add(Calendar.DATE, -1); //
Date theDate = calendar.getTime();
String s = df.format(theDate);
return s;
}
/**
* 获得指定日期的前一天
*
* @param specifiedDay
*
* @return
*
* @throws Exception
*/
public static String getSpecifiedDayBefore(String specifiedDay)
{
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date date = null;
try
{
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e)
{
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - 1);
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayBefore;
}
/**
* 获得指定日期的后一天
*
* @param specifiedDay
*
* @return
*/
public static Date getSpecifiedDayAfter(String specifiedDay)
{
Calendar c = Calendar.getInstance();
Date date = null;
try
{
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e)
{
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
String dayAfter = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return strToDate(dayAfter, "yyyy-MM-dd");
}
/**
* <li>功能描述:时间相减得到天数
*
* @param beginDateStr
* @param endDateStr
*
* @return long
*/
public static long getDaySub(String beginDateStr, String endDateStr)
{
long day = 0;
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date beginDate;
java.util.Date endDate;
try
{
beginDate = format.parse(beginDateStr);
endDate = format.parse(endDateStr);
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
//System.out.println("相隔的天数="+day);
} catch (ParseException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
return day;
}
/**
* 获取指定星期的日期
*
* @param week
* @param day_of_week 周日 1 周一 2 周二 3周三 4 周四 5 周五 6 周六 7
*
* @return
*/
public static String getWeekDate(int week, int day_of_week)
{
Calendar date = Calendar.getInstance(Locale.CHINA);
date.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
date.add(Calendar.WEEK_OF_MONTH, -week);//周数减一,即上周
date.set(Calendar.DAY_OF_WEEK, day_of_week);//日子设为星期
return DateUtils.dateToStr(date.getTime(), "yyyy-MM-dd");
}
/**
* 判断个时间是否在前2个时间段内
*
* @param begintime 开始时间
* @param endtime 结束时间
* @param currtime 需要判断的时间
*
* @return
*
* @return boolean 返回类型
*
* @Title: isTimeInBtTime
* @Description: (这里用一句话描述这个方法的作用)
* @author yangjie.wang
* @date 2016年12月29日 下午2:21:43
*/
public static boolean isTimeInBtTime(Date begintime, Date endtime, Date currtime)
{
String begintimeStr = DateUtils.dateToStr(begintime, "yyyy-MM-dd HH:mm:ss");
begintimeStr = "1970-01-01" + begintimeStr.substring(begintimeStr.indexOf(" "), begintimeStr.length());
begintime = DateUtils.strToDate(begintimeStr, "yyyy-MM-dd HH:mm:ss");
String endtimeStr = DateUtils.dateToStr(endtime, "yyyy-MM-dd HH:mm:ss");
endtimeStr = "1970-01-01" + endtimeStr.substring(endtimeStr.indexOf(" "), endtimeStr.length());
endtime = DateUtils.strToDate(endtimeStr, "yyyy-MM-dd HH:mm:ss");
String currTimeStr = DateUtils.dateToStr(currtime, "yyyy-MM-dd HH:mm:ss");
currTimeStr = "1970-01-01" + currTimeStr.substring(currTimeStr.indexOf(" "), currTimeStr.length());
currtime = DateUtils.strToDate(currTimeStr, "yyyy-MM-dd HH:mm:ss");
if (begintime.compareTo(endtime) > 0)
{//如果开始时间大于结束时间
if (!(currtime.compareTo(endtime) > 0 && currtime.compareTo(begintime) < 0))
{
return true;
}
} else
{
if (currtime.compareTo(begintime) > 0 && currtime.compareTo(endtime) < 0)
{
return true;
}
}
return false;
}
/*****
* 时间 增加、减少 n个分钟以后时间
* @param date YYYY-mm-dd HH:mm:ss
* @param minute >0 分钟
* @param type 增加和减少标志 0 减少 1增加
* **/
public static Date adjustDateByMinutes(Date d, int minute, int type)
{
Calendar Cal = Calendar.getInstance();
Cal.setTime(d);
if (type == 0)
{
Cal.add(Calendar.MINUTE, -minute);
} else
{
Cal.add(Calendar.MINUTE, minute);
}
return Cal.getTime();
}
/**
* 将时间格式yyyy-MM-dd转为yyyyMMdd
* @param date
* @return
*/
public static String dateToString(String date)
{
String str = "";
try
{
Date format = new SimpleDateFormat("yyyy-MM-dd").parse(date);
str = new SimpleDateFormat("yyyyMMdd").format(format);
return str;
}catch (Exception e)
{
return str;
}
}
/**
* 获取本周的第一天
* @return String
* **/
public static String getWeekStart(){
Calendar cal=Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.add(Calendar.WEEK_OF_MONTH, 0);
cal.set(Calendar.DAY_OF_WEEK, 2);
Date time=cal.getTime();
return new SimpleDateFormat("yyyy-MM-dd").format(time);
}
/**
* 获取本周的最后一天
* @return String
* **/
public static String getWeekEnd(){
Calendar cal=Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, cal.getActualMaximum(Calendar.DAY_OF_WEEK));
cal.add(Calendar.DAY_OF_WEEK, 1);
Date time=cal.getTime();
return new SimpleDateFormat("yyyy-MM-dd").format(time)+" 23:59:59";
}
/**
* 获取当前月份 前12月的日期 拿到的日期 格式 yyyy-MM-00
* @return
*/
public static String getLastMouthDayForYear(){
// 前 12个月日期
String month = "";
LocalDate today = LocalDate.now();
for (long i = 0L; i <= 11L; i++)
{
if(i == 11L){
LocalDate localDate = today.minusMonths(i);
month = localDate.toString().substring(0, 7);
}
}
return month+"-00";
}
/**
* 获取当前月份 前12月的日期 拿到的日期 格式 yyyy-MM
* @return
*/
public static String getLastMouthDayForYeardd(){
// 前 12个月日期
String month = "";
LocalDate today = LocalDate.now();
for (long i = 0L; i <= 11L; i++)
{
if(i == 11L){
LocalDate localDate = today.minusMonths(i);
month = localDate.toString().substring(0, 10);
}
}
return month;
}
public static String getTimeTransformationString(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM");
String format = simpleDateFormat.format(date);
return format;
}
public static String getTimeTransformationStringMouth(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(date);
return format;
}
}
分享在公司里使用的时间转换类型
最新推荐文章于 2024-05-16 20:42:16 发布