1. package com.tech.jin.util;
  2.  
  3. import java.text.DateFormat;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Calendar;
  7. import java.util.Date;
  8.  
  9. import org.apache.log4j.Logger;
  10.  
  11. public class DateUtil {
  12.  
  13. private static Logger logger = Logger.getLogger(DateUtil.class);
  14.  
  15. private static Date now = new Date();
  16.  
  17. /**
  18. * 获取日期格式对象
  19. * @param format
  20. * @return
  21. */
  22. private static DateFormat getFormatInstance(String format){
  23. DateFormat sdf = new SimpleDateFormat(format);
  24. return sdf;
  25. }
  26.  
  27. /**
  28. * date对象转字符串
  29. * @param date
  30. * @param format
  31. * @return
  32. */
  33. public static String dateToString(Date date,String format){
  34. if(date==null){
  35. return "";
  36. }
  37.  
  38. DateFormat df = getFormatInstance(format);
  39. String dateStr = df.format(date);
  40. logger.info("dateToString:"+dateStr);
  41. return dateStr;
  42. }
  43.  
  44. /**
  45. * 字符串转date对象
  46. * @param dateStr
  47. * @param format
  48. * @return
  49. */
  50. public static Date stringToDate(String dateStr,String format){
  51. if(dateStr==null||"".equals(dateStr.trim())){
  52. logger.info("要转换的date字符串为空...");
  53. return null;
  54. }
  55. logger.info("stringToDate:"+dateStr);
  56. DateFormat df = getFormatInstance(format);
  57. Date date = null;
  58. try {
  59. date = df.parse(dateStr);
  60. } catch (ParseException e) {
  61. logger.error("stringToDate转换错误:"+e);
  62. }
  63.  
  64. return date;
  65. }
  66.  
  67. /**
  68. * date字符串更换格式
  69. * @param dateStr
  70. * @param oldFormat
  71. * @param newFormat
  72. * @return
  73. */
  74. public static String stringToString(String dateStr,String oldFormat,String newFormat){
  75. Date date = stringToDate(dateStr, oldFormat);
  76. dateStr = dateToString(date, newFormat);
  77.  
  78. return dateStr;
  79. }
  80.  
  81. /**
  82. * 获取当前时间/日期
  83. * @return
  84. */
  85. public static Date getNow(){
  86. return now;
  87. }
  88.  
  89. /**
  90. * 获取当前时间/日期字符串
  91. * @param format
  92. * @return
  93. */
  94. public static String getNowStr(String format){
  95. String nowStr = dateToString(now, format);
  96. logger.info("获取当前时间字符串:"+nowStr);
  97. return nowStr;
  98. }
  99.  
  100. /**
  101. * 比较两个时间字符串
  102. * @param dateStr1
  103. * @param dateStr2
  104. * @param format
  105. * @return -2:比较时间异常
  106. * -1: (dateStr1 < dateStr2)
  107. * 0: (dateStr1 = dateStr2)
  108. * 1: (dateStr1 > dateStr2)
  109. *
  110. */
  111. public static int compareDateStr(String dateStr1,String dateStr2,String format){
  112.  
  113. logger.info("dateStr1:"+dateStr1+" dateStr2:"+dateStr2);
  114.  
  115. Date date1 = stringToDate(dateStr1, format);
  116. Date date2 = stringToDate(dateStr2, format);
  117.  
  118. int result = -2;//初始化状态
  119.  
  120. result = compareDate(date1, date2);
  121.  
  122. String resultStr = "对字符串进行("+format+")格式化后,";
  123. if(result==0){
  124. resultStr += dateStr1+" = "+dateStr2;
  125. }else if(result==1){
  126. resultStr += dateStr1+" > "+dateStr2;
  127. }else if(result==-1){
  128. resultStr += dateStr1+" < "+dateStr2;
  129. }else{
  130. resultStr += "比较日期异常...";
  131. }
  132. logger.info("比较时间结果:"+result +" "+resultStr);
  133.  
  134. return result;
  135.  
  136. }
  137.  
  138. /**
  139. * 比较两个date
  140. * @param date1
  141. * @param date2
  142. * @return -2:比较时间异常
  143. * -1: (date1 < date2)
  144. * 0: (date1 = date2)
  145. * 1: (date1 > date2)
  146. */
  147. public static int compareDate(Date date1,Date date2){
  148. int result = -2;//初始化状态
  149. if(date1==null||date2==null){
  150. return -2;
  151. }
  152.  
  153. result = date1.compareTo(date2);
  154. logger.info("compareDate:"+result);
  155.  
  156. return result;
  157. }
  158.  
  159. /**
  160. * 获取传入date的几天前或几天后日期
  161. * @param date
  162. * @param daysCount 天数(正数:daysCount天后;负数:daysCount天前)
  163. * @return
  164. */
  165. public static Date getDayBeforeOrAfter(Date date,int daysCount){
  166. if(date==null){
  167. return null;
  168. }
  169. Calendar c = Calendar.getInstance();
  170. c.setTime(date);
  171. c.add(Calendar.DATE, daysCount);
  172.  
  173. return c.getTime();
  174. }
  175.  
  176. /**
  177. * 获取传入dateStr的几天前或几天后日期
  178. * @param dateStr
  179. * @param format 传入传出的日期字符串格式
  180. * @param daysCount 天数(正数:daysCount天后;负数:daysCount天前)
  181. * @return
  182. */
  183. public static String getDayBeforeOrAfter(String dateStr,String format,int daysCount){
  184. if(dateStr==null||"".equals(dateStr.trim())){
  185. return "";
  186. }
  187. logger.info("dateStr:"+dateStr+" format:"+format +" daysCount:"+daysCount);
  188. Date date = stringToDate(dateStr, format);
  189. date = getDayBeforeOrAfter(date, daysCount);
  190. dateStr = dateToString(date, format);
  191. logger.info("dateStr:"+dateStr);
  192. return dateStr;
  193. }
  194.  
  195. /**
  196. * 获取date这个月的最后一天
  197. * @param date
  198. * @return
  199. */
  200. public static Date getDayMonthEnd(Date date){
  201. if(date==null){
  202. return null;
  203. }
  204. Calendar c = Calendar.getInstance();
  205. c.setTime(date);
  206. c.add(Calendar.MONTH, 1);//得到下个月
  207. c.set(Calendar.DATE, 1);//设置下个月1号初始化
  208. c.add(Calendar.DATE, -1);//下个月1号减一天,即date当月的最后一天
  209. return c.getTime();
  210. }
  211.  
  212. /**
  213. * 取两个日期的差值
  214. * @param startDate
  215. * @param endDate
  216. * @return int[]{days,hours,minutes,seconds}
  217. */
  218. public static int[] getDateDiff(Date startDate,Date endDate) {
  219.  
  220. if(startDate==null||endDate==null){
  221. logger.error("getDaysDiff:传入的日期参数异常...");
  222. return null;
  223. }
  224.  
  225. long time = (endDate.getTime() - startDate.getTime());//单位:毫秒
  226.  
  227. time = Math.abs(time);
  228.  
  229. time = time / 1000;//转成秒
  230.  
  231. long days = time / (24 * 60 * 60);
  232.  
  233. long hours = time % (24 * 60 * 60) / (60 * 60);
  234.  
  235. long minutes = time % (60 * 60) / 60;
  236.  
  237. long seconds = time % 60;
  238.  
  239. logger.info("日期差值:"+days+"天 "+hours+"小时 "+minutes+"分钟 "+seconds+"秒");
  240.  
  241. int[] diff = new int[]{(int)days,(int)hours,(int)minutes,(int)seconds};
  242.  
  243. return diff;
  244. }
  245.  
  246. /**
  247. * 得到date的daysCount天前/天后是星期几
  248. * @param date
  249. * @param daysCount
  250. * @return
  251. */
  252. public static String getAfterDayWeek(Date date,int daysCount) {
  253.  
  254. date = getDayBeforeOrAfter(date, daysCount);
  255. String dateStr = dateToString(date, "E");
  256.  
  257. logger.info("getAfterDayWeek:" + dateStr);
  258.  
  259. return dateStr;
  260. }
  261.  
  262. public static void main(String[] args) {
  263. Date a = stringToDate("20170106 23:57:59", "yyyyMMdd HH:mm:ss");
  264. Date b = stringToDate("20170107 23:56:59", "yyyyMMdd HH:mm:ss");
  265.  
  266. getDateDiff(a, b);
  267.  
  268. }
  269.  
  270. }

Java的日期工具类的更多相关文章

  1. JAVA 8 日期工具类

    JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...

  2. Java案例——日期工具类

    需求:定义一个日期工具类,包含两个方法,按日期转化成指定格式的字符串,把字符串解析为指定格式的日期 然后定义一个测试类测试 分析: 1.定义一个日期工具类 2.定义一个方法dateToString,用 ...

  3. java DateTimeUtil 日期工具类

    package com.sicdt.library.core.utils; import java.sql.Timestamp; import java.text.DateFormat; import ...

  4. java 常用日期工具类的操作

    获取指定日期的时间戳 /* * 获取指定日期的时间戳 * */ public static long getMillis(String date_str){ try { SimpleDateForma ...

  5. 日期工具类 - DateUtil.java

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

  6. Java基础知识强化92:日期工具类的编写和测试案例

    1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...

  7. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  8. java 日期工具类DateUtils

      日期工具类DateUtils CreateTime--2017年5月27日08:48:00Author:Marydon DateUtils.java-对日期类的进一步封装 import java. ...

  9. java日期工具类DateUtil-续一

    上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...

随机推荐

  1. 关于新版ADT创建项目时出现appcompat_v7的问题

    做Android开发的朋友最近会发现,更新ADT至22.6.0版本之后,创建新的安装项目,会出现appcompat_v7的内容.并且是创建一个新的内容就会出现.这到底是怎么回事呢?原来appcompa ...

  2. 记一次【求n以内的素数个数】的优化记录

    最近在leetCode上刷提,还是满锻炼人的,为以后面试打基础吧.不多说下面开始. 问题:求[2,n]之间的素数的个数. 来源:leetCode OJ 提示: Let's start with a i ...

  3. node-webkit 桌面开发 初入1

    node-webkit  是什么就不介绍了 注意官网的一句话 ”node-webkit is based on Chromium and node.js " 所以node-webkit 实际 ...

  4. Ubuntu 14.04 编译安装 boost 1.58

    简介 Boost is a set of libraries for the C++ programming language that provide support for tasks and s ...

  5. 利用vmware 搭建分布式集群

    前言:      我们需要至少3台服务器来实现分布式,鉴于没那么多钱买真机器,从学习和开发的角度看,只有虚拟机一条路了. 软件选择:     虚拟机使用VMware软件,因为主流而且资料比较多,学习成 ...

  6. Liunx面试题

    答案待定 1.请用shell查询file1 里面空行的所在行号2.编写ShellScript查询file1 以abc 结尾的行3.打印出file1 文件第1 到第3 行4.如何将本地80 端口的请求转 ...

  7. iOS 面试题(二):什么时候在 block 中不需要使用 weakSelf --转自唐巧

    问题 我们知道,在使用 block 的时候,为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,写下面这样的代码: __weak typeof(self) weakSelf ...

  8. docker好文收藏

    深入浅出Docker(一):Docker核心技术预览 2. 核心技术预览 Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观.我们从虚拟化方法的四个方面:隔离性.可配额/可度 ...

  9. linq 左连接

    var list = (from item in vall join item3 in v1 on new { item.FItemID, item.FAuxPropID } equals new { ...

  10. Q的深层嵌套

    1.如果将异步方法用同步的方式执行,try catch能捕获到错误,同时不会阻塞到主进程,因此console.log(3333)能执行. var fs = require('fs'); try { v ...