1. package util;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. /***
  7. * 日期工具类
  8. *
  9. * @author damao
  10. *
  11. */
  12. public class DateAndTimeUtil {
  13. /***
  14. * 日期月份减一个月
  15. *
  16. * @param datetime
  17. *            日期(2014-11)
  18. * @return 2014-10
  19. */
  20. public static String dateFormat(String datetime) {
  21. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  22. Date date = null;
  23. try {
  24. date = sdf.parse(datetime);
  25. } catch (ParseException e) {
  26. e.printStackTrace();
  27. }
  28. Calendar cl = Calendar.getInstance();
  29. cl.setTime(date);
  30. cl.add(Calendar.MONTH, -1);
  31. date = cl.getTime();
  32. return sdf.format(date);
  33. }
  34. public static String dateFormat(Date date) {
  35. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  36. return sdf.format(date);
  37. }
  38. /****
  39. * 传入具体日期 ,返回具体日期减一个月。
  40. *
  41. * @param date
  42. *            日期(2014-04-20)
  43. * @return 2014-03-20
  44. * @throws ParseException
  45. */
  46. public static String subMonth(String date) throws ParseException {
  47. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  48. Date dt = sdf.parse(date);
  49. Calendar rightNow = Calendar.getInstance();
  50. rightNow.setTime(dt);
  51. rightNow.add(Calendar.MONTH, -1);
  52. Date dt1 = rightNow.getTime();
  53. String reStr = sdf.format(dt1);
  54. return reStr;
  55. }
  56. /****
  57. * 获取月末最后一天
  58. *
  59. * @param sDate
  60. *            2014-11-24
  61. * @return 30
  62. */
  63. private static String getMonthMaxDay(String sDate) {
  64. SimpleDateFormat sdf_full = new SimpleDateFormat("yyyy-MM-dd");
  65. Calendar cal = Calendar.getInstance();
  66. Date date = null;
  67. try {
  68. date = sdf_full.parse(sDate + "-01");
  69. } catch (ParseException e) {
  70. e.printStackTrace();
  71. }
  72. cal.setTime(date);
  73. int last = cal.getActualMaximum(Calendar.DATE);
  74. return String.valueOf(last);
  75. }
  76. // 判断是否是月末
  77. public static boolean isMonthEnd(Date date) {
  78. Calendar cal = Calendar.getInstance();
  79. cal.setTime(date);
  80. if (cal.get(Calendar.DATE) == cal
  81. .getActualMaximum(Calendar.DAY_OF_MONTH))
  82. return true;
  83. else
  84. return false;
  85. }
  86. /***
  87. * 日期减一天、加一天
  88. *
  89. * @param option
  90. *            传入类型 pro:日期减一天,next:日期加一天
  91. * @param _date
  92. *            2014-11-24
  93. * @return 减一天:2014-11-23或(加一天:2014-11-25)
  94. */
  95. public static String checkOption(String option, String _date) {
  96. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  97. Calendar cl = Calendar.getInstance();
  98. Date date = null;
  99. try {
  100. date = (Date) sdf.parse(_date);
  101. } catch (ParseException e) {
  102. e.printStackTrace();
  103. }
  104. cl.setTime(date);
  105. if ("pre".equals(option)) {
  106. // 时间减一天
  107. cl.add(Calendar.DAY_OF_MONTH, -1);
  108. } else if ("next".equals(option)) {
  109. // 时间加一天
  110. cl.add(Calendar.DAY_OF_YEAR, 1);
  111. } else {
  112. // do nothing
  113. }
  114. date = cl.getTime();
  115. return sdf.format(date);
  116. }
  117. /***
  118. * 判断日期是否为当前月, 是当前月返回当月最小日期和当月目前最大日期以及传入日期上月的最大日和最小日
  119. * 不是当前月返回传入月份的最大日和最小日以及传入日期上月的最大日和最小日
  120. *
  121. * @param date
  122. *            日期 例如:2014-11
  123. * @return String[] 开始日期,结束日期,上月开始日期,上月结束日期
  124. * @throws ParseException
  125. */
  126. public static String[] getNow_Pre_Date(String date) throws ParseException {
  127. String[] str_date = new String[4];
  128. Date now = new Date();
  129. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  130. SimpleDateFormat sdf_full = new SimpleDateFormat("yyyy-MM-dd");
  131. String stMonth = sdf.format(now);
  132. String stdate = "";// 开始日期
  133. String endate = "";// 结束日期
  134. String preDate_start = "";// 上月开始日期
  135. String preDate_end = "";// 上月结束日期
  136. // 当前月
  137. if (date.equals(stMonth)) {
  138. stdate = stMonth + "-01"; // 2014-11-01
  139. endate = sdf_full.format(now);// 2014-11-24
  140. preDate_start = subMonth(stdate);// 2014-10-01
  141. preDate_end = subMonth(endate);// 2014-10-24
  142. } else {
  143. // 非当前月
  144. String monthMaxDay = getMonthMaxDay(date);
  145. stdate = date + "-01";// 2014-10-01
  146. endate = date + "-" + monthMaxDay;// 2014-10-31
  147. preDate_start = subMonth(stdate);// 2014-09-01
  148. preDate_end = subMonth(endate);// 2014-09-30
  149. }
  150. str_date[0] = stdate;
  151. str_date[1] = endate;
  152. str_date[2] = preDate_start;
  153. str_date[3] = preDate_end;
  154. return str_date;
  155. }
  156. public static void main(String[] args) throws ParseException {
  157. /*
  158. * String a =DateAndTimeUtil.dateFormat(new Date());
  159. * System.out.println(a); String b =
  160. * DateAndTimeUtil.subMonth("2014-03-31"); System.out.println(b);
  161. * SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date
  162. * dt=sdf.parse("2014-03-31");
  163. * System.out.println(DateAndTimeUtil.isMonthEnd(dt));
  164. */
  165. String str = null;
  166. // str = DateAndTimeUtil.checkOption("next", "2014-11-30");
  167. // str = getMonthMaxDay("2014-11-24");
  168. // str = dateFormat("2014-11");
  169. str = getNow_Pre_Date("2014-10")[0];
  170. System.out.println(str);
  171. }
  172. }

Java 日期工具类(日期,月份加减等)--转的更多相关文章

  1. java工具类-日期工具类

    1.获得时间戳 为了统一其他语言的如php和unix系统获取的时间戳是10位长度的,精确到秒. java时间戳长度是13位,精确到毫秒 我们获取时间戳需要相应处理. //获取当前时间戳,除以1000, ...

  2. java日期工具类DateUtil

    一名优秀的程序员,不仅需要有着丰富解决问题的方案,还需要的便是代码的沉淀,这不仅有助于自己快速的开发程序,也有利于保证程序的健壮.那如何才能沉淀自己的”代码“呢?从自己编写util开始其实就是一个不错 ...

  3. java 日期工具类

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  4. 日期工具类 - DateUtil.java

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

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

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

  6. java 日期工具类DateUtils

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

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

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

  8. java日期工具类DateUtil-续二

    该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...

  9. Java获取上周,本周,本月,本年,开始结束时间 。日期工具类

    由于获取日期经常会使用到,所有我自己写了一个工具类 1.基本上能用上的都写出来了,包括:1)获取当天的开始时间 2)获取当天的结束时间 3)获取昨天的开始时间 4)获取昨天的结束时间 5)获取明天的开 ...

随机推荐

  1. Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证

    1.首先了解一下Token 1.token也称作令牌,由uid+time+sign[+固定参数]组成: uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/e ...

  2. ABP 基于DDD的.NET开发框架 学习(七)继承不同的service直接调用api的区别

    1.IApplicationService->IBaseService->具体IXXXService 具体XXXService->BaseService,具体IXXXService ...

  3. ADO.NET 五(DataAdapter 与 DataSet)

    在执行对表中数据的查询时还能将数据保存到 DataSet 中,但需要借助 DataAdapter 类来实现. 在实际应用中,DataAdapter 与 DataSet 是在查询操作中使用最多的类. 此 ...

  4. 智慧图携手DataPipeline,让实体商业更智慧!

    近日,国内领先的实体商业数字化运营服务商智慧图携手DataPipeline,基于专业的数据集成与应用基础展开了合作. 未来DataPipeline将通过不断提升自身产品和服务实力,与智慧图一道致力于帮 ...

  5. live555的使用(转载)

    Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现 了对多种音视频编码格式的音视频数据的流 ...

  6. 【Bug】MQ消息与事务提交

    项目联调期间,遇到个bug,涉及MQ消息传递和事务提交时间问题,简单记录下. 背景 审核服务(审核创建项目),点击审核通过,后台代码会在提交事务前发送MQ消息(该消息由项目管理服务消费),发送成功后, ...

  7. SQL Server 字段提取拼音首字母

    目前工作中遇到一个情况,需要将SQL Server中的一个字段提取拼音的首字母,字段由汉字.英文.数字以及“-”构成,百度了一堆,找到如下方法,记录一下,以备后用! 首先建立一个函数 --生成拼音首码 ...

  8. Flask之flask-sqlalchemy

    接下来基于这个Flask项目,我们要加入Flask-SQLAlchemy让项目变得生动起来 1.加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入 ...

  9. h5中hash的用法实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Mayor's posters (离散化线段树+对lazy的理解)

    题目 题意: n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围 li,ri(1<=li<=ri<=10000000) .求出最后还能看见多少张海报. 思路: 由于 ...