Java中String、Date、LocalDate互相转换工具类

野性酷女 2022-05-26 00:51 447阅读 0赞

该工具类实现的功能有:

1.String日期转Date

2.Date日期转String

3.Date日期转LocaDate

4.LocalDate转Date

5.获取当前日期(String)

6.获取当前日期(Date)

7.获取两个日期之间的间隔

8.获取日期的星期

9.比较两个日期的大小

10.日期转为时间戳

11.时间戳转日期

12.去除日期连接符号(“-”),转为long

13.日期加上相应的天数

代码如下所示:

  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.time.Instant;
  4. import java.time.LocalDate;
  5. import java.time.ZoneId;
  6. import java.time.ZonedDateTime;
  7. import java.time.format.DateTimeFormatter;
  8. import java.util.*;
  9. /**
  10. *
  11. * 日期工具类
  12. * @since 1.0
  13. * @date 2018-04-21
  14. * @author 林老师带你学编程 微信号码:lzqcode
  15. *
  16. */
  17. public class DateUtils{
  18. public static String F19 = "yyyy-MM-dd HH:mm:ss";
  19. public static String F14 = "yyyyMMddHHmmss";
  20. public static String F10 = "yyyy-MM-dd";
  21. public static String F8 = "yyyyMMdd";
  22. public static String[] dataStringFormats = {F8, F10, F14, F19, "yyyy/MM/dd", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy-MM-dd HH:mm"};
  23. /**
  24. * 将字符串转换为long类型的值(不包含-符号)
  25. * @param dateString 2016-10-12
  26. * @return 20161012
  27. */
  28. public static long stringToDateLong(String dateString) {
  29. String[] dates = dateString.split("-");
  30. return Long.valueOf(dates[0] + dates[1] + dates[2]);
  31. }
  32. /**
  33. * 将日期转化为默认的格式显示
  34. * @param date Date实例
  35. * @return 2017-06-06
  36. */
  37. public static String dateToString(Date date) {
  38. return dateToString(date, F10);
  39. }
  40. /**
  41. * @param date Date实例
  42. * @param format yyyy-MM-dd
  43. * @return 2017-06-06
  44. */
  45. public static String dateToString(Date date, String format) {
  46. if (date == null) {
  47. return null;
  48. }
  49. SimpleDateFormat sf = new SimpleDateFormat(format);
  50. return sf.format(date);
  51. }
  52. /**
  53. * 时间戳转默认字符串日期
  54. * @param time 1496739850253
  55. * @return 2017-06-06
  56. */
  57. public static String longToString(long time) {
  58. return longToString(time, F10);
  59. }
  60. /**
  61. * 时间戳转字符串日期(格式可以自己选择)
  62. * @param time 1496739850253
  63. * @param format yyyy-MM-dd
  64. * @return 2017-06-06
  65. */
  66. public static String longToString(long time, String format) {
  67. SimpleDateFormat sf = new SimpleDateFormat(format);
  68. return sf.format(new Date(time));
  69. }
  70. /**
  71. * 在指定日期上加上一定天数获得新的日期
  72. * @param day 2016-06-06
  73. * @param addDay 10
  74. * @return 2016-06-16
  75. */
  76. public static String getNextDay(String day, int addDay) {
  77. Calendar calendar = getCalendar(day);
  78. calendar.add(Calendar.DAY_OF_MONTH, addDay);
  79. return getDateString(calendar);
  80. }
  81. /**
  82. * 获取当前时间(包含小时、分、秒)
  83. * @return 2016-06-06 10:20:10
  84. */
  85. public static String getCurrTime() {
  86. return dateToString(new Date(), F19);
  87. }
  88. /**
  89. * 获取当前日期(不包含小时、分、秒)
  90. * @return 2016-06-06
  91. */
  92. public static String getCurrDate() {
  93. return dateToString(new Date(), F10);
  94. }
  95. /**
  96. * 获取日期相距天数
  97. * @param startDate 2016-06-06
  98. * @param endDate 2016-06-10
  99. * @return int 4
  100. */
  101. public static int getCompareDate(String startDate, String endDate) {
  102. try {
  103. SimpleDateFormat formatter = new SimpleDateFormat(F10);
  104. Date date1 = formatter.parse(startDate);
  105. Date date2 = formatter.parse(endDate);
  106. long l = date2.getTime() - date1.getTime() + 1000;
  107. long d = l / (24 * 60 * 60 * 1000);
  108. return (int) d;
  109. } catch (ParseException e) {
  110. }
  111. return 0;
  112. }
  113. private static Calendar getCalendar(String day) {
  114. Calendar cal = Calendar.getInstance();
  115. cal.set(Integer.parseInt(day.substring(0, 4)), Integer.parseInt(day.substring(5, 7)) - 1, Integer.parseInt(day.substring(8, 10)), 0, 0, 0);
  116. return cal;
  117. }
  118. /**
  119. * 当前时间几小时相差多少时间
  120. * @param hour
  121. * @return
  122. * @since 2017年8月18日
  123. */
  124. public static Date getAddHourTime(int hour) {
  125. Calendar dalendar = Calendar.getInstance();
  126. dalendar.add(Calendar.HOUR_OF_DAY, hour);
  127. return dalendar.getTime();
  128. }
  129. /**
  130. * 将Calendar转换为日期字符串(字符串的格式:2018-04-21)
  131. * @param cale
  132. * @return
  133. */
  134. public static String getDateString(Calendar cale) {
  135. int year = cale.get(Calendar.YEAR);
  136. int month = cale.get(Calendar.MONTH) + 1;
  137. int day = cale.get(Calendar.DAY_OF_MONTH);
  138. return year + "-" + (month < 10 ? "0" + month : month + "") + "-" + (day < 10 ? "0" + day : day + "");
  139. }
  140. /**
  141. * Calendar转为指定格式的日期字符串
  142. * @param cale
  143. * @param format
  144. * @return
  145. */
  146. public static String getDateString(Calendar cale, String format) {
  147. return dateToString(cale.getTime(), format);
  148. }
  149. /**
  150. *计算两个日期之间相差的时间
  151. * @param sDate
  152. * @param eDate
  153. * @return
  154. * @throws Exception
  155. */
  156. public static long substract(String sDate, String eDate) {
  157. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  158. Date d1 = null;
  159. try {
  160. d1 = sdf.parse(sDate);
  161. } catch (ParseException e) {
  162. e.printStackTrace();
  163. }
  164. Date d2 = null;
  165. try {
  166. d2 = sdf.parse(eDate);
  167. } catch (ParseException e) {
  168. e.printStackTrace();
  169. }
  170. return (d2.getTime() - d1.getTime() + 1000000) / (3600 * 24 * 1000);
  171. }
  172. /**
  173. * 返回当前日期, 格式:yyyy-mm-dd 使用方法: Date.getToday();
  174. * @return 2018-04-21
  175. */
  176. public static String getToday() {
  177. Calendar rightNow = Calendar.getInstance();
  178. int year = rightNow.get(Calendar.YEAR);
  179. int month = rightNow.get(Calendar.MONTH) + 1;
  180. int day = rightNow.get(Calendar.DAY_OF_MONTH);
  181. return year + "-" + (month < 10 ? "0" + month : month + "") + "-" + (day < 10 ? "0" + day : day + "");
  182. }
  183. /**
  184. * 字符串的日期格式的计算
  185. * @param smdate 较大时结果为负数
  186. * @param bdate 较大时结果为正数
  187. * @return int
  188. * @throws ParseException
  189. */
  190. public static int daysBetween(String smdate, String bdate) throws ParseException {
  191. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  192. Calendar cal = Calendar.getInstance();
  193. cal.setTime(sdf.parse(smdate));
  194. long time1 = cal.getTimeInMillis();
  195. cal.setTime(sdf.parse(bdate));
  196. long time2 = cal.getTimeInMillis();
  197. long between_days = (time2 - time1) / (1000 * 3600 * 24);
  198. return Integer.parseInt(String.valueOf(between_days));
  199. }
  200. /**
  201. * 获取yyyy-MM-dd格式日期的所在星期数
  202. * 例如2018-04-21得到的结果是7
  203. * @param dateStr
  204. * @return
  205. */
  206. public static int getWeekDay(String dateStr) {
  207. int week = -1;
  208. SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
  209. Date date;
  210. try {
  211. date = ft.parse(dateStr);
  212. if (date != null) {
  213. Calendar cal = Calendar.getInstance();
  214. cal.setTime(date);
  215. week = cal.get(Calendar.DAY_OF_WEEK);
  216. }
  217. } catch (ParseException e) {
  218. e.printStackTrace();
  219. }
  220. return week;
  221. }
  222. * 20180421转化为2016-04-21
  223. * @param day
  224. * @return
  225. */
  226. public static String intToDay(long day) {
  227. String dayStr = String.valueOf(day);
  228. return new StringBuilder().append(dayStr.substring(0, 4)).append("-").append(dayStr.substring(4, 6)).append("-").append(dayStr.substring(6, 8)).toString();
  229. }
  230. public static long dayToInt(String day) {
  231. return Long.parseLong(day.replaceAll("-", ""));
  232. }
  233. /**
  234. * 判断某一日期是星期几,星期天为第7天
  235. * @param day
  236. * @return
  237. */
  238. public static String getDayOfWeekCh(String day) {
  239. int dayInt;
  240. Calendar cal = Calendar.getInstance();
  241. cal.set(Integer.parseInt(day.substring(0, 4)), Integer.parseInt(day.substring(5, 7)) - 1, Integer.parseInt(day.substring(8, 10)), 0, 0, 0);
  242. dayInt = cal.get(Calendar.DAY_OF_WEEK) - 1;
  243. if (dayInt == 0) {
  244. dayInt = 7;
  245. }
  246. return dayInt + "";
  247. }
  248. /**
  249. * 日期解析
  250. * @param source
  251. * @param format
  252. * @return
  253. * @throws ParseException
  254. */
  255. public static Date parseDate(String source, String format) {
  256. SimpleDateFormat sdf = new SimpleDateFormat(format);
  257. try {
  258. return sdf.parse(source);
  259. } catch (ParseException e) {
  260. return null;
  261. }
  262. }
  263. /**
  264. * 获取指定年月份的第一天
  265. * @param year
  266. * @param month
  267. * @return
  268. */
  269. public static String monthFirstDay(int year, int month) {
  270. Calendar cal = Calendar.getInstance();
  271. //设置年份
  272. cal.set(Calendar.YEAR, year);
  273. //设置月份
  274. cal.set(Calendar.MONTH, month - 1);
  275. //获取某月最小天数
  276. int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
  277. //设置日历中月份的最小天数
  278. cal.set(Calendar.DAY_OF_MONTH, firstDay);
  279. //格式化日期
  280. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  281. String firstDayOfMonth = sdf.format(cal.getTime());
  282. return firstDayOfMonth;
  283. }
  284. /**
  285. * 获取指定年月份的最后一天
  286. * @param year
  287. * @param month
  288. * @return
  289. */
  290. public static String monthLastDay(int year, int month) {
  291. Calendar cal = Calendar.getInstance();
  292. //设置年份
  293. cal.set(Calendar.YEAR, year);
  294. //设置月份
  295. cal.set(Calendar.MONTH, month - 1);
  296. //获取某月最小天数
  297. int firstDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
  298. //设置日历中月份的最小天数
  299. cal.set(Calendar.DAY_OF_MONTH, firstDay);
  300. //格式化日期
  301. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  302. String lastDayOfMonth = sdf.format(cal.getTime());
  303. return lastDayOfMonth;
  304. }
  305. /**
  306. * Date类型转LocalDate类型
  307. * @param date
  308. * @return
  309. */
  310. public static LocalDate dateToLocalDate(Date date) {
  311. Instant instant = date.toInstant();
  312. ZoneId zoneId = ZoneId.systemDefault();
  313. LocalDate localPriceDate = instant.atZone(zoneId).toLocalDate();
  314. return localPriceDate;
  315. }
  316. /**
  317. * LocalDate类型转Date类型
  318. * @param localDate
  319. * @return Date
  320. */
  321. public static Date localDateToDate(LocalDate localDate) {
  322. ZoneId zoneId = ZoneId.systemDefault();
  323. ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
  324. Date date = Date.from(zdt.toInstant());
  325. return date;
  326. }
  327. }

如果大家对文章有什么问题或者疑意之类的、想要源代码的、想看更多此类文章的,都可以可以加我订阅号,订阅号上面我会定期更新最新博客和资源。 如果嫌麻烦可以直接加我wechat:lzqcode

20180421211631992

发表评论

表情:
评论列表 (有 0 条评论,447人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java类型转换工具

    不多说,直接上代码,亲们可以直接复制使用,里面包括了常用的类型转换,一般而言足够使用了! public class ObjectParser \{     publi