LocalDateTimeUtils.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.emato.cus.supervise.util;
  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.Period;
  5. import java.time.ZoneId;
  6. import java.time.format.DateTimeFormatter;
  7. import java.time.temporal.ChronoUnit;
  8. import java.time.temporal.TemporalUnit;
  9. import java.util.Date;
  10. /**
  11. * @author Scott Chen
  12. * @version 1.0
  13. * 2017-10-28 10:47
  14. */
  15. public class LocalDateTimeUtils {
  16. public static final String DATA_TIME_HYPHEN = "yyyy-MM-dd HH:mm:ss";
  17. private LocalDateTimeUtils() { }
  18. //获取当前时间的LocalDateTime对象
  19. //LocalDateTime.now();
  20. //根据年月日构建LocalDateTime
  21. //LocalDateTime.of();
  22. //比较日期先后
  23. //LocalDateTime.now().isBefore(),
  24. //LocalDateTime.now().isAfter(),
  25. //Date转换为LocalDateTime
  26. public static LocalDateTime convertDateToLDT(Date date) {
  27. return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
  28. }
  29. //LocalDateTime转换为Date
  30. public static Date convertLDTToDate(LocalDateTime time) {
  31. return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
  32. }
  33. //获取指定日期的毫秒
  34. public static Long getMilliByTime(LocalDateTime time) {
  35. return time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
  36. }
  37. //获取指定日期的秒
  38. public static Long getSecondsByTime(LocalDateTime time) {
  39. return time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
  40. }
  41. //获取指定时间的指定格式
  42. public static String formatTime(LocalDateTime time, String pattern) {
  43. return time.format(DateTimeFormatter.ofPattern(pattern));
  44. }
  45. //获取当前时间的指定格式
  46. public static String formatNow(String pattern) {
  47. return formatTime(LocalDateTime.now(), pattern);
  48. }
  49. //日期加上一个数,根据field不同加不同值,field为ChronoUnit.*
  50. public static LocalDateTime plus(LocalDateTime time, long number, TemporalUnit field) {
  51. return time.plus(number, field);
  52. }
  53. //日期减去一个数,根据field不同减不同值,field参数为ChronoUnit.*
  54. public static LocalDateTime minu(LocalDateTime time, long number, TemporalUnit field) {
  55. return time.minus(number, field);
  56. }
  57. /**
  58. * 获取两个日期的差 field参数为ChronoUnit.*
  59. * @param startTime
  60. * @param endTime
  61. * @param field 单位(年月日时分秒)
  62. * @return
  63. */
  64. public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) {
  65. Period period = Period.between(LocalDate.from(startTime), LocalDate.from(endTime));
  66. if (field == ChronoUnit.YEARS) {
  67. return period.getYears();
  68. }
  69. if (field == ChronoUnit.MONTHS) {
  70. return period.getYears() * 12 + period.getMonths();
  71. }
  72. return field.between(startTime, endTime);
  73. }
  74. //获取一天的开始时间,2017,7,22 00:00
  75. public static LocalDateTime getDayStart(LocalDateTime time) {
  76. return time.withHour(0)
  77. .withMinute(0)
  78. .withSecond(0)
  79. .withNano(0);
  80. }
  81. //获取一天的结束时间,2017,7,22 23:59:59.999999999
  82. public static LocalDateTime getDayEnd(LocalDateTime time) {
  83. return time.withHour(23)
  84. .withMinute(59)
  85. .withSecond(59)
  86. .withNano(999999999);
  87. }
  88. }