DateUtils 时间公用类

  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. /**
  6. *
  7. *<p>Description : 日期工具类</p>
  8. *<p>Date : May 3, 2013</p>
  9. *<p>Remark : </p>
  10. * @version
  11. */
  12. public class DateUtils {
  13. /**
  14. * YYYY-MM-DD格式
  15. */
  16. private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  17. /**
  18. * YYYY-MM格式
  19. */
  20. private static SimpleDateFormat monthFormat = new SimpleDateFormat(
  21. "yyyy-MM");
  22. /**
  23. * 将String转换成Date
  24. */
  25. public synchronized static Date stringToDate(String pattern, String p_date_s) throws ParseException {
  26. if (p_date_s == null || "".equals(p_date_s))
  27. return null;
  28. SimpleDateFormat sdf = new SimpleDateFormat(pattern);
  29. return sdf.parse(p_date_s);
  30. }
  31. /**
  32. * 将Date转换成String
  33. */
  34. public static String dateToString(String pattern, Date p_string_d){
  35. if (p_string_d == null)
  36. return null;
  37. SimpleDateFormat sdf = null;
  38. try {
  39. sdf = new SimpleDateFormat(pattern);
  40. } catch (Exception e) {
  41. LogUtils.error(DateUtils.class, e);
  42. }
  43. return sdf.format(p_string_d);
  44. }
  45. /**
  46. *
  47. * 根据日期,获得当年第一月
  48. *
  49. * @param date
  50. * 日期
  51. * @return 当年第一月 yyyy-MM
  52. */
  53. public static String GetFirstMonth(String date) {
  54. Calendar calendar = Calendar.getInstance();
  55. Date dateFrom = null;
  56. try {
  57. dateFrom = format.parse(date);
  58. calendar.setTime(dateFrom);
  59. int year = calendar.get(Calendar.YEAR);
  60. return year + "-" + "01";
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. return null;
  64. }
  65. }
  66. /**
  67. * 根据日期,获得当前月
  68. *
  69. * @param date
  70. * 日期
  71. * @return 当年第一月 yyyy-MM
  72. */
  73. public static String GetMonth(String date) {
  74. Calendar calendar = Calendar.getInstance();
  75. Date dateFrom = null;
  76. try {
  77. dateFrom = format.parse(date);
  78. calendar.setTime(dateFrom);
  79. int year = calendar.get(Calendar.YEAR);
  80. int month = calendar.get(Calendar.MONTH) + 1;
  81. return year + "-" + StringUtils.Pading(Integer.toString(month), 2, StringUtils.LEFT, '0');
  82. } catch (Exception e) {
  83. e.printStackTrace();
  84. return null;
  85. }
  86. }
  87. /**
  88. * 获取指定日期的当月第一天日期
  89. *
  90. * @param date
  91. * 日期
  92. * @return 当月第一天日期
  93. */
  94. public static String GetFirstDateOfMonth(String date) {
  95. Calendar calendar = Calendar.getInstance();
  96. Date dateFrom = null;
  97. try {
  98. dateFrom = format.parse(date);
  99. calendar.setTime(dateFrom);
  100. int count = calendar.get(Calendar.DAY_OF_MONTH) - 1;
  101. for (int i = 0; i < count; i++) {
  102. calendar.add(calendar.DATE, -1);
  103. }
  104. return format.format(calendar.getTime());
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. return null;
  108. }
  109. }
  110. /**
  111. * 倒退数周的周一日期
  112. *
  113. * @param date
  114. * 日期
  115. * @param week
  116. * 周数
  117. * @return 周第一天
  118. */
  119. public static String GetFirstDateOfWeek(String date, int week) {
  120. Calendar calendar = Calendar.getInstance();
  121. Date dateFrom = null;
  122. try {
  123. dateFrom = format.parse(date);
  124. calendar.setTime(dateFrom);
  125. int dow = calendar.get(Calendar.DAY_OF_WEEK) - 2;
  126. int count = 7 * week;
  127. for (int i = 0; i < count + dow; i++) {
  128. calendar.add(calendar.DATE, -1);
  129. }
  130. return format.format(calendar.getTime());
  131. } catch (Exception e) {
  132. e.printStackTrace();
  133. return null;
  134. }
  135. }
  136. /**
  137. * String类型日期转换Date型
  138. *
  139. * @param bir
  140. * 出生年月
  141. * @param string
  142. * 格式
  143. * @return 日期型
  144. * @throws ParseException
  145. * 异常
  146. */
  147. public static Date getDateTime(String bir, String string)
  148. throws ParseException {
  149. SimpleDateFormat format = new SimpleDateFormat(string);
  150. Date date = format.parse(bir);
  151. return date;
  152. }
  153. /**
  154. * 取得当前系统时间
  155. * @return
  156. */
  157. public static Date getCurrentDateTime() {
  158. Calendar c = Calendar.getInstance();
  159. return c.getTime();
  160. }
  161. /**
  162. * 转换当前时间
  163. * @param format 指定格式
  164. * @return 日期
  165. */
  166. public static Date parseCurrentDateTime(String format) {
  167. Calendar c = Calendar.getInstance();
  168. Date d = null;
  169. try {
  170. d = parseDateTime(c.getTime(), format);
  171. } catch (ParseException e) {
  172. e.printStackTrace();
  173. }
  174. return d;
  175. }
  176. /**
  177. * 格式化当前时间
  178. * @param format 指定格式
  179. * @return 日期字符串形式
  180. */
  181. public static String formatCurrentDateTime(String format) {
  182. Calendar c = Calendar.getInstance();
  183. SimpleDateFormat dateFormat = new SimpleDateFormat(format);
  184. return dateFormat.format(c.getTime());
  185. }
  186. /**
  187. * 取得指定时间固定格式的字符串形式
  188. * @param date 时间
  189. * @param format 格式
  190. * @return
  191. */
  192. public static String formatDateTime(Date date, String format) {
  193. SimpleDateFormat dateFormat = new SimpleDateFormat(format);
  194. return dateFormat.format(date);
  195. }
  196. /**
  197. * 转换指定时间为固定格式
  198. * @param dateStr 时间
  199. * @param format 格式
  200. * @return
  201. * @throws ParseException
  202. */
  203. public static Date parseDateTime(String dateStr, String format) throws ParseException {
  204. SimpleDateFormat dateFormat = new SimpleDateFormat(format);
  205. return dateFormat.parse(dateStr);
  206. }
  207. /**
  208. * 转换指定时间为固定格式
  209. * @param date 时间
  210. * @param format 格式
  211. * @return
  212. * @throws ParseException
  213. */
  214. public static Date parseDateTime(Date date, String format) throws ParseException {
  215. SimpleDateFormat dateFormat = new SimpleDateFormat(format);
  216. return dateFormat.parse(dateFormat.format(date));
  217. }
  218. /**
  219. * 根据日期取得对应周周一日期
  220. *
  221. * @param date
  222. * @return
  223. */
  224. public static Date getMondayOfWeek(Date date) {
  225. Calendar monday = Calendar.getInstance();
  226. monday.setTime(date);
  227. monday.setFirstDayOfWeek(Calendar.MONDAY);
  228. monday.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
  229. return monday.getTime();
  230. }
  231. /**
  232. * 取得上月第一天
  233. *
  234. * @param date
  235. * @return
  236. */
  237. public static Date getFirstDateOfMonth(Date date) {
  238. Calendar c = Calendar.getInstance();
  239. //c.setTime(date);
  240. c.add(Calendar.MONTH, -1);
  241. c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));
  242. return c.getTime();
  243. }
  244. /**
  245. * 根据日期取得对应月的1号
  246. * xuxiaojun
  247. * @param date
  248. * @return
  249. */
  250. public static Date getFirstDateOfMonthByDay(Date date) {
  251. Calendar c = Calendar.getInstance();
  252. c.setTime(date);
  253. c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));
  254. return c.getTime();
  255. }
  256. /**
  257. * 得到系统的年,格式:"YYYY"
  258. *
  259. *
  260. * @return int
  261. */
  262. public static int getSysYear() {
  263. Calendar cal = Calendar.getInstance();
  264. int year = cal.get(Calendar.YEAR);
  265. return year;
  266. }
  267. /**
  268. * 得到当前周是一年第几周
  269. * @param date
  270. * @return
  271. */
  272. public static int getWeekOfYear(Date date){
  273. Calendar cal = Calendar.getInstance();
  274. cal.setTime(date);
  275. return cal.get(Calendar.WEEK_OF_YEAR);
  276. }
  277. /**
  278. * 获得指定日期的当前月的最后一天
  279. * @param date 指定日期
  280. * @return
  281. */
  282. public static Date getLastDayOfMonth(Date date) {
  283. Calendar cal = Calendar.getInstance();
  284. cal.setTime(new Date());
  285. cal.add(Calendar.DATE, 1);
  286. return cal.getTime();
  287. }
  288. /**
  289. * 获得指定日期的下一天
  290. * @param date 指定日期
  291. * @return
  292. */
  293. public static Date getNextDay(Date date){
  294. Calendar cal = Calendar.getInstance();
  295. cal.setTime(date);
  296. cal.add(Calendar.DATE, 1);
  297. return cal.getTime();
  298. }
  299. /**
  300. * 获得当前日期当前月的第一天
  301. * @param format 指定格式
  302. * @return 指定格式的日期形式
  303. * @author hll
  304. */
  305. public static String getFirstDayOfMonth(String format) {
  306. Calendar cal = Calendar.getInstance();
  307. cal.setTime(new Date());
  308. cal.add(Calendar.DATE, 1); //本月的第一天
  309. return formatDateTime(cal.getTime(), format);
  310. }
  311. /**
  312. * 获得当前日期当前月的最后一天
  313. * @param format 指定格式
  314. * @return 指定格式的日期形式
  315. */
  316. public static String getLastDayOfMonth(String format) {
  317. Calendar cal = Calendar.getInstance();
  318. cal.setTime(new Date());
  319. cal.set(Calendar.DAY_OF_MONTH, 1);
  320. cal.add(Calendar.MONTH, 1);
  321. cal.add(Calendar.DATE, -1); //本月的最后一天
  322. return formatDateTime(cal.getTime(), format);
  323. }
  324. /**
  325. * 获得当前日期当前周的第一天
  326. * @param format 指定格式
  327. * @return 指定格式的日期形式
  328. * @author hll
  329. */
  330. public static String getFirstDayOfWeek(String format) {
  331. Calendar cal = Calendar.getInstance();
  332. cal.setTime(new Date());
  333. cal.setFirstDayOfWeek(Calendar.MONDAY);
  334. cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 本周的第一天
  335. return formatDateTime(cal.getTime(), format);
  336. }
  337. /**
  338. * 获得当前日期当前周的最后一天
  339. * @param format 指定格式
  340. * @return 指定格式的日期形式
  341. * @author hll
  342. */
  343. public static String getLastDayOfWeek(String format) {
  344. Calendar cal = Calendar.getInstance();
  345. cal.setTime(new Date());
  346. cal.setFirstDayOfWeek(Calendar.MONDAY);
  347. cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY+6); // 本周的最后一天
  348. return formatDateTime(cal.getTime(), format);
  349. }
  350. /**
  351. * 获得当前日期当前年的第一天
  352. * @param format 指定格式
  353. * @return 指定格式的日期形式
  354. * @author hll
  355. */
  356. public static String getFirstDayOfYear(String format) {
  357. Calendar cal = Calendar.getInstance();
  358. cal.setTime(new Date());
  359. cal.set(Calendar.DAY_OF_YEAR, 1); //本年的第一天
  360. return formatDateTime(cal.getTime(), format);
  361. }
  362. /**
  363. * 获得当前日期当前年的最后一天
  364. * @param format 指定格式
  365. * @return 指定格式的日期形式
  366. * @author hll
  367. */
  368. public static String getLastDayOfYear(String format) {
  369. Calendar cal = Calendar.getInstance();
  370. cal.setTime(new Date());
  371. cal.set(Calendar.DAY_OF_YEAR, 1); //本年的第一天
  372. cal.add(Calendar.YEAR, 1);
  373. cal.add(Calendar.DATE,-1); //本年的最后一天
  374. return formatDateTime(cal.getTime(), format);
  375. }
  376. /**
  377. * 获得下一个月的最后一天
  378. * @param format 指定格式
  379. * @return 指定格式的日期形式
  380. */
  381. public static String getLastDayOfNextMonth(String format) {
  382. Calendar cal = Calendar.getInstance();
  383. cal.setTime(new Date());
  384. cal.set(Calendar.DAY_OF_MONTH, 1);
  385. cal.add(Calendar.MONTH, 2);
  386. cal.add(Calendar.DATE, -1);
  387. return formatDateTime(cal.getTime(), format);
  388. }
  389. public static int[] getDateTimeSub(Date date1, Date date2) {
  390. Calendar cal = Calendar.getInstance();
  391. cal.setTime(date1);
  392. int y1 = cal.get(Calendar.YEAR);
  393. int m1 = cal.get(Calendar.MONTH);
  394. int d1 = cal.get(Calendar.DAY_OF_YEAR);
  395. cal.setTime(date2);
  396. int y2 = cal.get(Calendar.YEAR);
  397. int m2 = cal.get(Calendar.MONTH);
  398. int d2 = cal.get(Calendar.DAY_OF_YEAR);
  399. int[] array = new int[] {y1 - y2, m1 - m2, d1 - d2};
  400. return array;
  401. }
  402. /**
  403. * 取得两个日期的差值
  404. * @param startTime 开始日期
  405. * @param endTime 结束日期
  406. * @param 适用于yyyy-MM-dd,精确到日
  407. * @return 差值日
  408. */
  409. public static int dateDiff(String startTime, String endTime) {
  410. SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
  411. long nd = 1000 * 24 * 60 * 60;
  412. long diff;
  413. long day = 0l;
  414. try {
  415. diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
  416. day = diff / nd;
  417. } catch (ParseException e) {
  418. e.printStackTrace();
  419. }
  420. return (int)day;
  421. }
  422. }

猜你喜欢

转载自blog.csdn.net/qq_35192741/article/details/81026991