·烂笔头Web端 4 2714

Java8时间方法LocalDate和LocalDateTime工具类

```

/**

  • Java8时间方法LocalDate和LocalDateTime
  • getYear() int 获取当前日期的年份
  • getMonth() Month 获取当前日期的月份对象
  • getMonthValue() int 获取当前日期是第几月
  • getDayOfWeek() DayOfWeek 表示该对象表示的日期是星期几
  • getDayOfMonth() int 表示该对象表示的日期是这个月第几天
  • getDayOfYear() int 表示该对象表示的日期是今年第几天
  • withYear(int year) LocalDate 修改当前对象的年份
  • withMonth(int month) LocalDate 修改当前对象的月份
  • withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当月的日期
  • isLeapYear() boolean 是否是闰年
  • lengthOfMonth() int 这个月有多少天
  • lengthOfYear() int 该对象表示的年份有多少天(365或者366)
  • plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
  • plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的月份数
  • plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
  • plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
  • minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
  • minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的月数
  • minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
  • minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
  • compareTo(ChronoLocalDate other) int 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚,
  • isBefore(ChronoLocalDate other) boolean 比较当前对象日期是否在other对象日期之前
  • isAfter(ChronoLocalDate other) boolean 比较当前对象日期是否在other对象日期之后
  • isEqual(ChronoLocalDate other) boolean 比较两个日期对象是否相等 */

/**

  • @author Chrison

  • Created at 2019/11/11 */ public class DateUtils4Java8 {

    public static final String DATE_FORMAT_FULL = “yyyy-MM-dd HH:mm:ss”;

    public static final String DATE_FORMAT_SHORT = “yyyy-MM-dd”;

    public static final String DATE_FORMAT_SHORT_2 = “MM-dd HH:mm:ss”;

    public static final String DATE_FORMAT_COMPACT = “yyyyMMdd”;

    public static final String DATE_FORMAT_COMPACTFULL = “yyyyMMddHHmmss”;

    public static final String DATE_FORMAT_FULL_MSEL = “yyyyMMddHHmmssSSSS”;

    public static final String DATE_YEAR_MONTH = “yyyyMM”;

    public static final String DATE_FORMAT_FULL_MSE = “yyyyMMddHHmmssSSS”;

    /**

    • 获取系统当前日期
    • @return */ public static Date getCurrentDate() { return new Date(); }

    /**

    • 获取系统当前日期
    • @return */ public static LocalDateTime getCurrentLocalDateTime() { return LocalDateTime.now(); }

    /**

    • 根据时间格式返回对应的String类型的时间
    • @param format
    • @return */ public static String getCurDateTime(String format) { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); String dataTime = now.format(dateTimeFormatter); return dataTime; }

    /**

    • 得到当前日期
    • @return String 当前日期 yyyy-MM-dd HH:mm:ss格式
    • @author kevin */ public static String getCurDateTimeFull() { return getCurDateTime(DATE_FORMAT_FULL); }

    /**

    • 得到当前日期
    • @return String 当前日期 yyyy-MM-dd HH:mm:ss格式
    • @author kevin */ public static String getCurDateTimeShort2() { return getCurDateTime(DATE_FORMAT_SHORT_2); }

    /**

    • 得到当前日期
    • @return String 当前日期 yyyyMMddHHmmss格式
    • @author kevin */ public static String getCurDateTime1() { return getCurDateTime(DATE_FORMAT_FULL); }

    /**

    • 得到当前日期YYYYMM格式
    • @return String 当前日期 yyyyMM格式
    • @author kevin */ public static String getCurDateYYYYMM() { return getCurDateTime(DATE_YEAR_MONTH); }

    /**

    • 得到当前日期
    • @return String 当前日期 yyyyMMdd格式
    • @author kevin */ public static String getCurDateYYYYMMDD() { return getCurDateTime(DATE_FORMAT_COMPACT); }

    /**

    • 判断是否是今天
    • @param strDate
    • @return */ public static boolean isCurrentDay(String strDate) { boolean bRet = false; LocalDate strLocalDate = LocalDate.parse(strDate); if (LocalDate.now().getYear() == strLocalDate.getYear()) { MonthDay monthDay = MonthDay.from(strLocalDate); MonthDay today = MonthDay.from(LocalDate.now()); return monthDay.equals(today); } return bRet; }

    /**

    • 获取几小时后的时间
    • @param hour
    • @param format
    • @return */ public static String getAfterDateTime(int hour, String format) { LocalTime localTime = LocalTime.now().plusHours(hour); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); String dataTime = localTime.format(dateTimeFormatter); return dataTime; }

    /**

    • 当前日期时间戳(yyyyMMddHHmmssSSSS)
    • @return
    • @author liangxuekai */ public static String getTimeStamp() { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_FORMAT_FULL_MSEL); return now.format(dateTimeFormatter); }

    /**

    • 日期转字符串
    • @return String
    • @author kevin */ public static String parseDateToString(Date thedate, String format) { if (thedate != null) { Instant instant = thedate.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return localDateTime.format(dateTimeFormatter); } return null; }

    /**

    • 日期转字符串
    • @return String
    • @author kevin */ public static String parseDateToString(Date thedate, String format, String zoneId) { if (thedate != null) { Instant instant = thedate.toInstant(); ZoneId zone = ZoneOffset.of(zoneId); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return localDateTime.format(dateTimeFormatter); } return null; }

    /**

    • parseDateToString(Date thedate, String format)的重载方法
    • @param thedate
    • @return */ public static String parseDateToString(Date thedate) { // String format = “yyyy-MM-dd”; return parseDateToString(thedate, DATE_FORMAT_FULL); }

    /**

    • parseDateToString(Date thedate, String format)的重载方法
    • @param thedate
    • @return */ public static String parseDateToStringByZoneId(Date thedate, String zoneId) { // String format = “yyyy-MM-dd”; return parseDateToString(thedate, DATE_FORMAT_FULL,zoneId); }

    /**

    • 字符串转日期
    • @return Date
    • @author kevin */ public static Date parseStringToDate(String thedate, String format) { DateFormat sdf = new SimpleDateFormat(format); Date dd1 = null; try { dd1 = sdf.parse(thedate); } catch (ParseException e) { e.printStackTrace(); } return dd1; }

    /**

    • 由String型日期转成format形式String
    • @param format1 原先格式
    • @param format2 转化格式
    • @return String
    • @author kevin */ public static String changeFormatDateString(String format1, String format2, String strDate) { if (strDate == null) { return “”; } if (strDate.length() >= format1.length() && format1.length() >= format2.length()) { return parseDateToString(parseStringToDate(strDate, format1), format2); } return strDate; }

    /**

    • 得到当前日期的前N天时间 yyyymmdd
    • @param format
    • @param day
    • @return */ public static String beforeNDaysDate(String format, int day) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); if (day > 0) { return LocalDateTime.now().minusDays(day).format(dateTimeFormatter); } return null; }

    /**

    • 获得N个月后的日期

    • theDate 日期

    • int month 月数

    • format 格式 */ public static String afterNMonthDate(String theDate, int month, String format) {

      DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return LocalDateTime.parse(theDate,dateTimeFormatter) .plusMonths(month) .format(dateTimeFormatter);

    }

    /**

    • 得到N天后的日期

    • @param theDate 某日期

    •            格式 yyyy-MM-dd
      
    • @param nDayNum N天

    • @return String N天后的日期

    • @author kevin */ public static String afterNDaysDate(String theDate, Integer nDayNum, String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);

      return LocalDateTime.parse(theDate,dateTimeFormatter) .plusDays(nDayNum) .format(dateTimeFormatter); }

    /**

    • 得到N小时后的日期
    • @param theDate 时间
    • @param nHourNum N小时数
    • @param format 时间格式
    • @return */ public static String afterNHoursDate(String theDate, Integer nHourNum, String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return LocalDateTime.parse(theDate,dateTimeFormatter) .plusHours(nHourNum) .format(dateTimeFormatter); }

    /**

    • 得到N分钟后的日期
    • @param theDate
    • @param nMinNum
    • @param format
    • @return */ public static String afterNMinsDate(String theDate, Integer nMinNum, String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return LocalDateTime.parse(theDate,dateTimeFormatter) .plusMinutes(nMinNum) .format(dateTimeFormatter); }

    /**

    • 得到N秒后的日期
    • @param theDate
    • @param nSecNum
    • @param format
    • @return */ public static String afterNSecondsDate(String theDate, Integer nSecNum, String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return LocalDateTime.parse(theDate,dateTimeFormatter) .plusSeconds(nSecNum) .format(dateTimeFormatter); }

    // 比较两个字符串格式日期大小,带格式的日期 public static boolean isBefore(String strdat1, String strdat2, String format) { try { Date dat1 = parseStringToDate(strdat1, format); Date dat2 = parseStringToDate(strdat2, format); return dat1.before(dat2); } catch (Exception e) { e.printStackTrace(); return false; } }

    // 比较两个字符串格式日期大小,带格式的日期,返回int public static long isBefore_int(String strdat1, String strdat2, String format) { long result = 0; try { Date dat1 = parseStringToDate(strdat1, format); Date dat2 = parseStringToDate(strdat2, format); return dat2.getTime() - dat1.getTime(); } catch (Exception e) { e.printStackTrace(); } return result; }

    /*

    • 得到上一个月或者下一个月的日期 / public static String getDayafterMonth(String theDate, int month, String formatStr) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatStr); return LocalDateTime.parse(theDate).plusMonths(month).format(dateTimeFormatter); / Calendar now = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(formatStr); Date dat1 = parseStringToDate(theDate, formatStr); now.setTime(dat1); sdf.setTimeZone(TimeZone.getDefault()); now.add(Calendar.MONTH, month); return sdf.format(now.getTime());*/ }

    /**

    • 将秒转换为小时分秒等
    • @param sec
    • @return */ public String changeTime(int sec) { String temp = “”; if (sec < 60) { temp = “” + sec + “秒”; } else if (sec < 3600) { temp = “” + sec / 60 + “分” + sec % 60 + “秒”; } else { temp = “” + sec / 3600 + “小时” + (sec % 3600) / 60 + “分” + sec % 60 + “秒”; } return temp; }

    /**

    • 方法描述:
    • 计算两个日期相差天数
    • @param end 结束日期
    • @param start 开始日期
    • @return 作者:liangxuekai
    • 日期:2018 2018年1月31日 */ public static int getSubDays(String end, String start) { LocalDate startDate = LocalDate.parse(start); LocalDate endDate = LocalDate.parse(end); Long between = ChronoUnit.DAYS.between(startDate, endDate); return between.intValue(); }

    /**

    • 方法描述:
    • 计算两个日期相差天数2
    • @param endDate 结束日期
    • @param startDate 开始日期
    • @return 作者:liangxuekai
    • 日期:2018 2018年1月31日 */ public static int getSubDays(LocalDate endDate, LocalDate startDate) { Long between = ChronoUnit.DAYS.between(startDate, endDate); return between.intValue(); }

    public static String getTimeDiff(Date time1, Date time2) throws Exception { long l = time1.getTime() - time2.getTime(); String returnStr = “”; long day = l / (24 * 60 * 60 * 1000); if (day > 0) { returnStr += (day + “天”); } long hour = (l / (60 * 60 * 1000) - day * 24); if (hour > 0) { returnStr += (hour + “小时”); } long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60); if (min > 0) { returnStr += (min + “分”); } long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); if (s > 0) { returnStr += (s + “秒”); } return returnStr; }

    /**

    • 格式化时间-默认yyyy-MM-dd HH:mm:ss格式
    • @param dateTime LocalDateTime对象
    • @param pattern 要格式化的字符串
    • @return */ public static String formatDateTime(LocalDateTime dateTime, String pattern) { if (dateTime == null) { return null; } return dateTime.format(DateTimeFormatter.ofPattern(StringUtils.isEmpty(pattern) ? DATE_FORMAT_FULL : pattern)); }

    public static String formatDateTime(LocalDateTime dateTime) { return formatDateTime(dateTime, DATE_FORMAT_FULL); }

    /**

    • 获取某天的00:00:00
    • @param dateTime
    • @return */ public static String getDayStart(LocalDateTime dateTime) { return formatDateTime(dateTime.with(LocalTime.MIN)); }

    public static String getDayStart() { return getDayStart(LocalDateTime.now()); }

    /**

    • 获取某天的23:59:59
    • @param dateTime
    • @return */ public static String getDayEnd(LocalDateTime dateTime) { return formatDateTime(dateTime.with(LocalTime.MAX)); }

    public static String getDayEnd() { return getDayEnd(LocalDateTime.now()); }

    /**

    • 获取某月第一天的00:00:00
    • @param dateTime LocalDateTime对象
    • @return */ public static String getFirstDayOfMonth(LocalDateTime dateTime) { return formatDateTime(dateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN)); }

    public static String getFirstDayOfMonth() { return getFirstDayOfMonth(LocalDateTime.now()); }

    /**

    • 获取某月最后一天的23:59:59
    • @param dateTime LocalDateTime对象
    • @return */ public static String getLastDayOfMonth(LocalDateTime dateTime) { return formatDateTime(dateTime.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX)); }

    public static String getLastDayOfMonth() { return getLastDayOfMonth(LocalDateTime.now()); }

    /**

    • 获取某年第一天的00:00:00
    • @param dateTime LocalDateTime对象
    • @return */ public static String getFirstDayOfYear(LocalDateTime dateTime) { return formatDateTime(dateTime.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN)); }

    public static String getFirstDayOfYear() { return getFirstDayOfYear(LocalDateTime.now()); }

    /**

    • 获取某年最后一天的23:59:59
    • @param dateTime LocalDateTime对象
    • @return */ public static String getLastDayOfYear(LocalDateTime dateTime) { return formatDateTime(dateTime.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX)); }

    public static String getLastDayOfYear() { return getLastDayOfYear(LocalDateTime.now()); }

    /**

    • Date转LocalDate
    • @param date */ public static LocalDate date2LocalDate(Date date) { if(null == date) { return null; } return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); }

    /**

    • Date转LocalDateTime
    • @param date */ public static LocalDateTime date2LocalDateTime(Date date) { if(null == date) { return null; } return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); }

    /**

    • LocalDate转Date
    • @param localDate
    • @return */ public static Date localDate2Date(LocalDate localDate) { if(null == localDate) { return null; } ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault()); return Date.from(zonedDateTime.toInstant()); }

    /**

    • LocalDateTime转Date
    • @param localDateTime
    • @return */ public static Date localDateTime2Date(LocalDateTime localDateTime) { if(null == localDateTime) { return null; } ZonedDateTime zonedDateTime = localDateTime.toLocalDate().atStartOfDay(ZoneId.systemDefault()); return Date.from(zonedDateTime.toInstant()); }

    public static String DEFAULT_FORMAT = “yyyy-MM-dd HH:mm:ss”;

    public static String SEQUENCE_FORMAT = “yyyyMMddHHmmss”;

    public static String DEFAULT_DATE = “yyyy-MM-dd”;

    public static String VN_DATE = “dd/MM/yyyy”;

    public static String formatNowWithDefaultFormat() { return formatNow(DEFAULT_FORMAT); }

    /**

    • @param pattern

    • @return e.g. 2018-08-22 22:55:17 */ public static String formatNow(String pattern) { LocalDateTime now = LocalDateTime.now();

      return format(now, pattern); }

    /**

    • format a date time to the given pattern
    • @param dateTime
    • @param pattern
    • @return e.g. 2018-08-22 22:55:17 */ public static String format(LocalDateTime dateTime, String pattern) { if (org.springframework.util.StringUtils.isEmpty(pattern)) { pattern = DEFAULT_FORMAT; } DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return dateTime.format(formatter); }

    public static String formatDate(LocalDate date, String pattern) { if (org.springframework.util.StringUtils.isEmpty(pattern)) { pattern = DEFAULT_DATE; } DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return date.format(formatter); }

    public static LocalDateTime parse(String strDateTime) { return parse(strDateTime, DEFAULT_FORMAT); }

    /**

    • parse a formatted date time string to LocalDateTime
    • @param strDateTime
    • @param pattern
    • @return */ public static LocalDateTime parse(String strDateTime, String pattern) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return LocalDateTime.parse(strDateTime, formatter);

    }

    /**

    • a formatted ISO 8601 date time string to LocalDateTime
    • @param strDateTime
    • @return */ public static LocalDateTime parseISODateTime(String strDateTime) { if (org.springframework.util.StringUtils.isEmpty(strDateTime)) { return null; } DateTimeFormatter ISO_OFFSET_DATE_TIME_X = new DateTimeFormatterBuilder() .parseCaseInsensitive() .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME) .optionalStart().appendOffset(“+HH”, “Z”).optionalEnd() .toFormatter(); return LocalDateTime.parse(strDateTime, ISO_OFFSET_DATE_TIME_X); }

    /**

    • parse a formatted date time string to LocalDate
    • @param strDate
    • @return */ public static LocalDate parseToDate(String strDate) { int dateLength = DEFAULT_DATE.length(); if (org.springframework.util.StringUtils.isEmpty(strDate) || strDate.length() < dateLength) { return null; } String dateStr = strDate.substring(0, dateLength); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE); return LocalDate.parse(dateStr, formatter); }

    public static LocalDate parseToDateFuzzy(String year, String month, String day) { if (org.springframework.util.StringUtils.isEmpty(year)) { return null; } if (org.springframework.util.StringUtils.isEmpty(month)) { month = “01”; } if (month.length() == 1) { month = “0” + month; } if (org.springframework.util.StringUtils.isEmpty(day)) { day = “01”; } if (day.length() == 1) { day = “0” + day; } return parseToDate(year + “-” + month + “-” + day); }

    public static LocalDate parseAdvanceAIBirthDay(String birthDayStr, String separator) { if (org.springframework.util.StringUtils.isEmpty(birthDayStr)) { return null; } if (!birthDayStr.contains(separator)) { return parseToDateFuzzy(birthDayStr, “”, “”); } else if (birthDayStr.indexOf(separator) == birthDayStr.lastIndexOf(separator)) { return parseToDateFuzzy(birthDayStr.split(separator)[1], birthDayStr.split(separator)[0], “”); } else { return parseToDateFuzzy(birthDayStr.split(separator)[2], birthDayStr.split(separator)[1], birthDayStr.split(separator)[0]); } }

    /**

    • parse a formatted date time string to LocalDate
    • @param strDate
    • @return */ public static LocalDate parseToDate(String strDate, String pattern) { int dateLength = pattern.length(); if (org.springframework.util.StringUtils.isEmpty(strDate) || strDate.length() < dateLength) { return null; } String dateStr = strDate.substring(0, dateLength); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return LocalDate.parse(dateStr, formatter); }

    /**

    • @param localDateTime
    • @return 2018-08-22 22:55:17 -> 2018-08-22 00:00:00 */ public static LocalDateTime beginOfDay(LocalDateTime localDateTime) { return LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.of(0, 0, 0)); }

    /**

    • @param localDateTime
    • @return 2018-10-23 19:00:00 -> 2018-10-23 23:59:59 */ public static LocalDateTime endOfDay(LocalDateTime localDateTime) { return LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.of(23, 59, 59)); }

    /**

    • @param localDateTime
    • @return 2018-10-23 19:00:00 -> 2018-10-24 00:00:00 */ public static LocalDateTime beginOfTomorrow(LocalDateTime localDateTime) { return LocalDateTime.of(localDateTime.plusDays(1).toLocalDate(), LocalTime.of(0, 0, 0)); }

    /**

    • @param localDateTime
    • @return 2018-10-23 19:00:00 -> 2018-10-22 00:00:00 */ public static LocalDateTime beginOfYesterday(LocalDateTime localDateTime) { return LocalDateTime.of(localDateTime.minusDays(1).toLocalDate(), LocalTime.of(0, 0, 0)); }

    /**

    • @param localDateTime
    • @return 2018-10-23 19:00:00 -> 2018-10-22 23:59:59 */ public static LocalDateTime endOfYesterday(LocalDateTime localDateTime) { return LocalDateTime.of(localDateTime.minusDays(1).toLocalDate(), LocalTime.of(23, 59, 59)); }

    public static LocalDateTime timestampToLocalDateTime(long timestamp) { LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.of(“+08”)); return localDateTime; }

    public static int getDayInterval(LocalDateTime start, LocalDateTime end) { LocalDate startDate = start.toLocalDate(); LocalDate endDate = end.toLocalDate(); return (int) ChronoUnit.DAYS.between(startDate, endDate); }

    public static int getDayInterval(LocalDate start, LocalDate end) { return (int) ChronoUnit.DAYS.between(start, end); }

    public static Boolean checkIdCardExpiry(LocalDate expiryDate) { return getDayInterval(LocalDate.now(),expiryDate)<0; }

    public static long getAgeFromBirthday(LocalDate birthday) { return getAgeFromBirthday(birthday, LocalDate.now()); }

    public static long getAgeFromBirthday(LocalDate birthday, LocalDate toDate) { return ChronoUnit.YEARS.between(birthday, toDate); }

    public static long getCurrentUnixTimestampForChina() { return getCurrentUnixTimestamp(8); }

    public static long getCurrentUnixTimestampForVn() { return getCurrentUnixTimestamp(7); }

    public static long getCurrentUnixTimestamp(int zoneOffsetHours) { return LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(zoneOffsetHours)); }

    public static String changeTZ(String tzFrom, String tzTo, String dateToChange, String pattern) { ZoneId zoneFrom = ZoneId.of(tzFrom); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); LocalDateTime localtDateAndTime = LocalDateTime.parse(dateToChange, formatter); ZonedDateTime dateAndTimeINeed = ZonedDateTime.of(localtDateAndTime, zoneFrom );

     ZonedDateTime rezDate = dateAndTimeINeed.withZoneSameInstant(ZoneId.of(tzTo));
    
     return formatter.format(rezDate);
    

    }

    public static String convertUsTime1(Date date){ return changeTZ(“Asia/Shanghai”,“America/New_York”, DateUtils4Java8.parseDateToString(date),“yyyy-MM-dd HH:mm:ss”); }

    public static Date convertUsTime2(Date date){ return DateUtils.parseDate(changeTZ(“Asia/Shanghai”,“America/New_York”, DateUtils4Java8.parseDateToString(date),“yyyy-MM-dd HH:mm:ss”)); }

    public static void main(String[] args) { System.out.println(changeTZ(“Asia/Shanghai”,“America/New_York”,“2021-01-19T02:52:08.302+0000”,“yyyy-MM-dd’T’HH:mm:ss.SSS’+'0000”));

    } }

6 个赞
本文最后更新于 2023年6月16日

评论 (4)

TeacherDu
TeacherDu
2023年6月17日 21:28 北京市 联通 Windows
过来看看!
Chrison
Chrison
2023年6月18日 09:13 苏州市 电信 Mac
哈哈哈😁
荒野孤灯
荒野孤灯
2023年6月17日 07:45 黄石市 电信 Windows
终于冒泡了……
Chrison
Chrison
2023年6月17日 08:19 苏州市 电信 Mac
你不也没啥动静,就发发微语🌝

发表评论

支持 Markdown 语法