Java的日期工具类
package com.tech.jin.util; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; import org.apache.log4j.Logger; public class DateUtil { private static Logger logger = Logger.getLogger(DateUtil.class); private static Date now = new Date(); /**
* 获取日期格式对象
* @param format
* @return
*/
private static DateFormat getFormatInstance(String format){
DateFormat sdf = new SimpleDateFormat(format);
return sdf;
} /**
* date对象转字符串
* @param date
* @param format
* @return
*/
public static String dateToString(Date date,String format){
if(date==null){
return "";
} DateFormat df = getFormatInstance(format);
String dateStr = df.format(date);
logger.info("dateToString:"+dateStr);
return dateStr;
} /**
* 字符串转date对象
* @param dateStr
* @param format
* @return
*/
public static Date stringToDate(String dateStr,String format){
if(dateStr==null||"".equals(dateStr.trim())){
logger.info("要转换的date字符串为空...");
return null;
}
logger.info("stringToDate:"+dateStr);
DateFormat df = getFormatInstance(format);
Date date = null;
try {
date = df.parse(dateStr);
} catch (ParseException e) {
logger.error("stringToDate转换错误:"+e);
} return date;
} /**
* date字符串更换格式
* @param dateStr
* @param oldFormat
* @param newFormat
* @return
*/
public static String stringToString(String dateStr,String oldFormat,String newFormat){
Date date = stringToDate(dateStr, oldFormat);
dateStr = dateToString(date, newFormat); return dateStr;
} /**
* 获取当前时间/日期
* @return
*/
public static Date getNow(){
return now;
} /**
* 获取当前时间/日期字符串
* @param format
* @return
*/
public static String getNowStr(String format){
String nowStr = dateToString(now, format);
logger.info("获取当前时间字符串:"+nowStr);
return nowStr;
} /**
* 比较两个时间字符串
* @param dateStr1
* @param dateStr2
* @param format
* @return -2:比较时间异常
* -1: (dateStr1 < dateStr2)
* 0: (dateStr1 = dateStr2)
* 1: (dateStr1 > dateStr2)
*
*/
public static int compareDateStr(String dateStr1,String dateStr2,String format){ logger.info("dateStr1:"+dateStr1+" dateStr2:"+dateStr2); Date date1 = stringToDate(dateStr1, format);
Date date2 = stringToDate(dateStr2, format); int result = -2;//初始化状态 result = compareDate(date1, date2); String resultStr = "对字符串进行("+format+")格式化后,";
if(result==0){
resultStr += dateStr1+" = "+dateStr2;
}else if(result==1){
resultStr += dateStr1+" > "+dateStr2;
}else if(result==-1){
resultStr += dateStr1+" < "+dateStr2;
}else{
resultStr += "比较日期异常...";
}
logger.info("比较时间结果:"+result +" "+resultStr); return result; } /**
* 比较两个date
* @param date1
* @param date2
* @return -2:比较时间异常
* -1: (date1 < date2)
* 0: (date1 = date2)
* 1: (date1 > date2)
*/
public static int compareDate(Date date1,Date date2){
int result = -2;//初始化状态
if(date1==null||date2==null){
return -2;
} result = date1.compareTo(date2);
logger.info("compareDate:"+result); return result;
} /**
* 获取传入date的几天前或几天后日期
* @param date
* @param daysCount 天数(正数:daysCount天后;负数:daysCount天前)
* @return
*/
public static Date getDayBeforeOrAfter(Date date,int daysCount){
if(date==null){
return null;
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, daysCount); return c.getTime();
} /**
* 获取传入dateStr的几天前或几天后日期
* @param dateStr
* @param format 传入传出的日期字符串格式
* @param daysCount 天数(正数:daysCount天后;负数:daysCount天前)
* @return
*/
public static String getDayBeforeOrAfter(String dateStr,String format,int daysCount){
if(dateStr==null||"".equals(dateStr.trim())){
return "";
}
logger.info("dateStr:"+dateStr+" format:"+format +" daysCount:"+daysCount);
Date date = stringToDate(dateStr, format);
date = getDayBeforeOrAfter(date, daysCount);
dateStr = dateToString(date, format);
logger.info("dateStr:"+dateStr);
return dateStr;
} /**
* 获取date这个月的最后一天
* @param date
* @return
*/
public static Date getDayMonthEnd(Date date){
if(date==null){
return null;
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH, 1);//得到下个月
c.set(Calendar.DATE, 1);//设置下个月1号初始化
c.add(Calendar.DATE, -1);//下个月1号减一天,即date当月的最后一天
return c.getTime();
} /**
* 取两个日期的差值
* @param startDate
* @param endDate
* @return int[]{days,hours,minutes,seconds}
*/
public static int[] getDateDiff(Date startDate,Date endDate) { if(startDate==null||endDate==null){
logger.error("getDaysDiff:传入的日期参数异常...");
return null;
} long time = (endDate.getTime() - startDate.getTime());//单位:毫秒 time = Math.abs(time); time = time / 1000;//转成秒 long days = time / (24 * 60 * 60); long hours = time % (24 * 60 * 60) / (60 * 60); long minutes = time % (60 * 60) / 60; long seconds = time % 60; logger.info("日期差值:"+days+"天 "+hours+"小时 "+minutes+"分钟 "+seconds+"秒"); int[] diff = new int[]{(int)days,(int)hours,(int)minutes,(int)seconds}; return diff;
} /**
* 得到date的daysCount天前/天后是星期几
* @param date
* @param daysCount
* @return
*/
public static String getAfterDayWeek(Date date,int daysCount) { date = getDayBeforeOrAfter(date, daysCount);
String dateStr = dateToString(date, "E"); logger.info("getAfterDayWeek:" + dateStr); return dateStr;
} public static void main(String[] args) {
Date a = stringToDate("20170106 23:57:59", "yyyyMMdd HH:mm:ss");
Date b = stringToDate("20170107 23:56:59", "yyyyMMdd HH:mm:ss"); getDateDiff(a, b); } }
Java的日期工具类的更多相关文章
- JAVA 8 日期工具类
JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...
- Java案例——日期工具类
需求:定义一个日期工具类,包含两个方法,按日期转化成指定格式的字符串,把字符串解析为指定格式的日期 然后定义一个测试类测试 分析: 1.定义一个日期工具类 2.定义一个方法dateToString,用 ...
- java DateTimeUtil 日期工具类
package com.sicdt.library.core.utils; import java.sql.Timestamp; import java.text.DateFormat; import ...
- java 常用日期工具类的操作
获取指定日期的时间戳 /* * 获取指定日期的时间戳 * */ public static long getMillis(String date_str){ try { SimpleDateForma ...
- 日期工具类 - DateUtil.java
日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...
- Java基础知识强化92:日期工具类的编写和测试案例
1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- java 日期工具类DateUtils
日期工具类DateUtils CreateTime--2017年5月27日08:48:00Author:Marydon DateUtils.java-对日期类的进一步封装 import java. ...
- java日期工具类DateUtil-续一
上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...
随机推荐
- input range样式更改,模拟滑块
input range 样式更改,js模拟滑块实时更新数据. 效果图: html 代码: <div> <span class="slider"></s ...
- vue-router 创建 vue 单页应用示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Unix内核中打开文件的表示
Unix内核中已经打开文件,通过三种数据结构表示: 每个进程的进程表中的记录项,包含打开的文件的文件描述符表,与之关联的是: 文件描述符标识 指向一个文件表项的指针 内核为所有打开文件维持一张文件表, ...
- Autorelease自动释放池的使用
Autorelease自动释放池的使用 使用ARC开发,只是在编译时,编译器会根据代码结构自动添加了retain.release和autorelease. MRC内存管理原则:谁申请,谁释放 遇到al ...
- Global Mapper Lidar点云分类
Global Mapper Lidar Module还挺厉害的,自动分类的效果很不错. 首先去除地面点,用的是形态学滤波方法. 之后可以分类出建筑物.低中高树木.电力线路. https://www.b ...
- XEP-0078:非SASL认证
XEP-0078:非SASL认证 抽象: 这个文件规定了使用Jabber的Jabber的服务器和服务认证的协议:智商:AUTH命名空间.注意哦:本文规定的协议,取而代之的SASL认证的被取代,如RFC ...
- Hessian怎样实现远程调用
1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了对Hessian的支持. Hessian是由Caocho公司发布的一个轻量级的二进制协议远程调用实 ...
- Java中对象创建过程
本文介绍的对象创建过程仅限于普通Java对象,不包括数组和Class对象. 1.类加载检查 虚拟机遇到一条new指令时,首先去检查该指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用 ...
- Sprint
Sprint冲刺 1.选题 <寿司点餐系统> 2.app名 <Sushi> 3.团名 ZEG 4.目标 制作一个成型的人性化的寿司点餐系统,介绍各种寿司的材料做法吃法以及价格, ...
- 第九章伪代码编程过程 The PseudoCode Programming Process
目录: 1.创建类和子程序的步骤概述 2.伪代码 3.通过伪代码编程过程创建子程序 4.伪代码编程过程的替代方案 一.创建类和子程序的步骤概述 (1)创建一个类的步骤 1.创建类的总体设计 2.创建类 ...