当前位置: 首页 > news >正文

DateUtils时间的封装

import java.text.ParseException;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.commons.lang.StringUtils;

/**
*
* <p>
* 日期时间处理工具类
* </p>
*/
public class DateUtils {

private static final Class<DateUtils> CLAZZ = DateUtils.class;

public static final long ONE_WEEK = 604800000L;

public static final String FORMAT_DATE = "yyyy-MM-dd";

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

public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm";

// 1分钟60秒
// private static final long SECOND_OF_MINUT = 60;

// 1秒1000毫秒
// private static final long MILLSECOND_OF_SECOND = 1000;

// 一天多少毫秒 86400000L
public static final long DAY_OF_MILLSECOND = 86400000L;

// 一个小时多少毫秒数 3600000
private static final long HOUR_OF_MILLSECOND = 3600000L;

// 一分钟多少毫秒数 60000
private static final long MINUTE_OF_MILLSECOND = 60000L;

/**
* get the begin of today,2006-09-15 00:00:00 000
* @return
*/
public static Date getBeginOfToday() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}

/**
* 将java.util.Date转换为java.sql.Date
* @param date
* @return
*/
public static java.sql.Date getSQLDate(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
java.sql.Date sd = new java.sql.Date(cal.getTimeInMillis());
return sd;
}

/**
* 将java.sql.Timestamp 转换成java.util.Calendar
* @param timestamp
* @return
*/
public static java.util.Calendar getCalendarBySqlTimestamp(java.sql.Timestamp timestamp) {
if (timestamp != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new java.util.Date(timestamp.getTime()));
return calendar;
} else {
return null;
}
}

/**
* 将java.sql.Timestamp 转换成java.util.Date
* @param timestamp
* @return
*/
public static java.util.Date getUtilDateBySqlTimestamp(java.sql.Timestamp timestamp) {
if (timestamp != null) {
return new Date(timestamp.getTime());
} else {
return null;
}
}

/**
* 获取系统当前日期(不包括时间)
* @return
*/
public static String getCurrent() {
SimpleDateFormat dateFormat = new SimpleDateFormat();
dateFormat.applyPattern("yyyy-MM-dd");
return dateFormat.format(new Date());
}

/**
* 获取系统当前日期时间(包括时间)
* @return
*/
public static String getCurrentTime() {
SimpleDateFormat dateFormat = new SimpleDateFormat();
dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(new Date());
}

/**
* get the begin of day,2006-09-15 00:00:00 000
* @param date
* @return
*/
public static Date getBeginOfDay(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Date ds = new Date(cal.getTimeInMillis());
return ds;
}

/**
* 得到当前日期的凌晨12点59分59秒
* @return
*/
public static Date getEndOfToday() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}

/**
* 得到下一天
* @param date
* @return
*/
public static Date getNextDay(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
return cal.getTime();
}

/**
* 得到上一天(00:00:00)
* @return
*/
public static Date getTomorrow() {
Calendar cal = new GregorianCalendar();
cal.setTime(getBeginOfToday());
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
return cal.getTime();
}

/**
* 得到明天的这个时刻
* @return
*/
public static String getTomorrowNow() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
return formatTime(cal.getTime());
}

/**
* 得到昨天的这个时刻
* @return
*/
public static String getYesterdayNow() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) - 1);
return formatTime(cal.getTime());
}

/**
* 得到今天
* @return
*/
public static Date getToday() {
return new Date();
}

/**
* 得到指定日期的下一天
* @param date
* @return
*/
public static Date getNextMonth(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
return cal.getTime();
}

/**
* 得到指定日期的上一天
* @param date
* @return
*/
public static Date getPreviousDay(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}

/**
* 得到当前月的第一天
* @return
*/
public static Date getFirstDayOfCurMonth() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return getBeginOfDay(cal.getTime());
}

/**
* 得到当前月的最后一天
* @return
*/
public static Date getEndDayOfCurMonth() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
return getBeginOfDay(cal.getTime());
}

/**
* 格式化日期为"yyyy-MM-dd"形式
* @param d
* @return
*/
public static String formatDate(Date d) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
return df.format(d);
}

/**
* 将日期格式字符串解析为"yyyy-MM-dd"形式的日期
* @param dateStr
* @return
*/
public static Date parseDate(String dateStr) {
return parseDateWithStyle(dateStr, FORMAT_DATE);
}

/**
* 将日期格式字符串解析为"yyyy-MM-dd HH:mm:ss"形式的日期
* @param dateStr
* @return
*/
public static Date parseTimeStamp(String dateStr) {
return parseDateWithStyle(dateStr, FORMAT_TIMESTAMP);
}

/**
* 将日期格式的字符串解析为日期
* @param dateStr
* @param style
* @return
*/
public static Date parseDateWithStyle(String dateStr, String style) {
SimpleDateFormat df = new SimpleDateFormat(style);
Date returnDate = null;
try {
returnDate = df.parse(dateStr);
} catch (ParseException e) {
LogUtils.logError(CLAZZ, "analsys date error,analsys date str:", dateStr, " date formate:", style);
throw new RuntimeException();
}
return returnDate;
}

/**
* 格式化时间为"yyyy-MM-dd HH:mm:ss"形式
* @param d
* @return
*/
public static String formatTime(Date d) {
if(d == null){
return null;
}
SimpleDateFormat df = new SimpleDateFormat(FORMAT_TIMESTAMP);
return df.format(d);
}

/**
* 将指定的日期格式按照指定的格式进行格式化,返回字符串形式
* @param date 需要格式化的日期
* @param format 自定义的格式,DateUtils辅助类中已经定义了三种格式 例如:DateUtils.FORMAT_DATE
* @return
*/
public static String formatDate(Date date, String format) {
SimpleDateFormat dateFormat = new SimpleDateFormat();
dateFormat.applyPattern(format);
return dateFormat.format(date);
}

/**
* 得到两个日期中较大者
* @param date1
* @param date2
* @return
*/
public static Date getMax(Date date1, Date date2) {
if (date1 == null)
return date2;
if (date2 == null)
return date1;
if (date1.after(date2))
return date1;
return date2;
}

/**
* 得到两个日期中较小者
* @param date1
* @param date2
* @return
*/
public static Date getMin(Date date1, Date date2) {
if (date1 == null)
return date2;
if (date2 == null)
return date1;
if (date1.after(date2))
return date2;
return date1;
}

/**
* 得到year年month月的天数
* @param year
* @param month
* @return
*/
public static int daysOfMonth(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (isLeap(year))
return 29;
return 28;
default:
return 0;
}
}

/**
* 在指定日期基础上加若干天
* @param date
* @param day
* @return
*/
public static Date addDay(Date date, int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(5, day);
Date d = calendar.getTime();
return d;
}

/**
* 在指定日期基础上加若干小时
* @param date
* @param l
* @return
*/
public static Date addHour(Date date, long l) {
long oldD = date.getTime();
long deltaD = l * 60L * 60L * 1000L;
long newD = oldD + deltaD;
Date d = new Date(newD);
return d;
}

/**
* 在指定日期基础上加若干分钟
* @param date
* @param l
* @return
*/
public static Date addMinute(Date date, long l) {
long oldD = date.getTime();
long deltaD = l * 60L * 1000L;
long newD = oldD + deltaD;
Date d = new Date(newD);
return d;
}

/**
* 在指定日期基础上加若干月
* @param date
* @param i
* @return
*/
public static Date addMonth(Date date, int i) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
month += i;
int deltaY = month / 12;
month %= 12;
calendar.set(Calendar.MONTH, month);
if (deltaY != 0) {
int year = calendar.get(Calendar.YEAR);
calendar.set(Calendar.YEAR, deltaY + year);
}
return calendar.getTime();
}

/**
* 在指定日期基础上加若干秒
* @param date
* @param l
* @return
*/
public static Date addSecond(Date date, long l) {
long oldD = date.getTime();
long deltaD = l * 1000L;
long newD = oldD + deltaD;
Date d = new Date(newD);
return d;
}

/**
* 在指定日期基础上加若干年
* @param date
* @param i
* @return
*/
public static Date addYear(Date date, int i) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
calendar.set(Calendar.YEAR, i + year);
return calendar.getTime();
}

/**
* 判断一年是否是闰年
* @param year
* @return
*/
public static boolean isLeap(int year) {
boolean divBy4 = (year % 4 == 0);
boolean divBy100 = (year % 100 == 0);
boolean divBy400 = (year % 400 == 0);
return divBy4 && (!divBy100 || divBy400);
}

/**
* 计算两个日期之间的毫秒数
* @param beginDate
* @param endDate
* @return
*/
public static long countBetweenDays(String beginDate, String endDate) {
java.util.Date beginsDate = DateUtils.parseTimeStamp(beginDate);
java.util.Date endsDate = DateUtils.parseTimeStamp(endDate);
// 两个日期间隔毫秒数
return endsDate.getTime() - beginsDate.getTime();
}

/**
* 计算毫秒数
* @param day
* @param hour
* @param minute
* @return
*/
public static long countDay(int day, int hour, int minute) {
long value = 0L;
value = day * DAY_OF_MILLSECOND + hour * HOUR_OF_MILLSECOND + minute * MINUTE_OF_MILLSECOND;
return value;
}

public static Date addDate999(Date date){
if(null == date){
return null;
}
return new Date(date.getTime()+999);
}

/**
* 毫秒转为天,时,分,秒
* @param ms 毫秒
* @return
*/
public static String formatTime(long ms) {
int ss = 1000;
int mi = ss * 60;
int hh = mi * 60;
int dd = hh * 24;

long day = ms / dd;
long hour = (ms - day * dd) / hh;
long minute = (ms - day * dd - hour * hh) / mi;
long second = (ms - day * dd - hour * hh - minute * mi) / ss;

StringBuffer timeSb = new StringBuffer();

if(day > 0){
timeSb.append(day).append("天");
}

if(hour > 0){
timeSb.append(hour).append("小时");
}

if(minute > 0){
timeSb.append(minute).append("分");
}

if(second > 0){
timeSb.append(second).append("秒");
}

return timeSb.toString();
}

public static Date toDateFull(String str){
return toDate(str, "yyyy-MM-dd HH:mm:ss");
}

public static Date toDate(String date,String pattern){
if(StringUtils.isEmpty(date))
return null;
SimpleDateFormat f=new SimpleDateFormat(pattern);
try {
return f.parse(date);
} catch (ParseException e) {
throw new IllegalArgumentException("date format error.the str must be "+pattern);
}
}

public static int getMonthsBetween(Calendar d1, Calendar d2){
if (d1.after(d2)) {
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int months = d2.get(Calendar.MONTH) - d1.get(Calendar.MONTH);//当前月也算
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
months += d1.getActualMaximum(Calendar.MONTH)+1;//得到当年的实际月数;月数从0开始,所以 +1
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return months;
}

public static String date2String(Date date,String pattern){
SimpleDateFormat f=new SimpleDateFormat(pattern);
return f.format(date);
}

public static String getOldStrTimeOnDay(Date date,int oldDay) {
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime(date);

calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + oldDay);

SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return f.format(calendar.getTime());

}

public static String getOldStrTimeOnMonth(Date date,int oldmonth,String patter) {
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime(date);

// calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + oldmonth);
calendar.add(Calendar.MONTH, oldmonth);

SimpleDateFormat f=new SimpleDateFormat(patter);
return f.format(calendar.getTime());

}

public static void main(String[] args) {
// System.out.println(formatTime(60000000));
System.out.println(getOldStrTimeOnMonth(parseTimeStamp("2017-07-31 00:00:00"), 2, "yyyyMMdd"));
}
}

转载于:https://www.cnblogs.com/xxj-bigshow/p/7601625.html

相关文章:

  • 数学口袋精灵bug的发现及单元测试
  • 用fail2ban阻止ssh暴力破解root密码
  • Centos 下面升级系统内核(转)
  • 两个二进制数求和
  • magento 货币换算
  • iOS -- tableView顶部留白
  • C链表的简单案例
  • Java与面向对象设计
  • TCP与UDP的区别
  • Mysql Order By 字符串排序,mysql 字符串order by
  • Java7,AutoClosable
  • Java循环练习:婚礼上的谎言
  • yum命令使用大全   软件安装
  • Linux信号
  • 云计算如何结合DevOps推动软件交付成功
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • cookie和session
  • flask接收请求并推入栈
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • javascript从右向左截取指定位数字符的3种方法
  • java中具有继承关系的类及其对象初始化顺序
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue2 SSR 的优化之旅
  • windows下使用nginx调试简介
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 翻译:Hystrix - How To Use
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 前端面试题总结
  • 区块链技术特点之去中心化特性
  • 树莓派 - 使用须知
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 与 ConTeXt MkIV 官方文档的接驳
  • gunicorn工作原理
  • ionic异常记录
  • ​人工智能书单(数学基础篇)
  • # 数据结构
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (06)Hive——正则表达式
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (第二周)效能测试
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (蓝桥杯每日一题)love
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .htaccess配置重写url引擎
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET 分布式技术比较
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证