From b0b8cbc7ab57b23d80e4a7423940e62a9e972e9d Mon Sep 17 00:00:00 2001 From: yexuejc007 Date: Mon, 15 May 2023 16:47:57 +0800 Subject: [PATCH] =?UTF-8?q?[update]=20=E6=97=A5=E6=9C=9F=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E4=B8=B0=E5=AF=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yexuejc/base/util/DateTimeUtil.java | 114 +++++++++++++++--- .../java/com/yexuejc/base/util/DateUtil.java | 41 +++++++ 2 files changed, 139 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/yexuejc/base/util/DateTimeUtil.java b/src/main/java/com/yexuejc/base/util/DateTimeUtil.java index 97041fe..57dabbb 100644 --- a/src/main/java/com/yexuejc/base/util/DateTimeUtil.java +++ b/src/main/java/com/yexuejc/base/util/DateTimeUtil.java @@ -1,11 +1,13 @@ package com.yexuejc.base.util; +import java.text.ParseException; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import java.util.Date; + /** * 新版时间日期出来 工具 * @@ -258,9 +260,19 @@ public class DateTimeUtil { * @return */ public static LocalDateTime parseLocalDateTime13(long timestamp) { + return parseLocalDateTime13(timestamp, ZoneId.systemDefault()); + } + + /** + * Long 转 LocalDateTime + * + * @param timestamp 13位(毫秒) + * @param zoneId 时区 + * @return + */ + public static LocalDateTime parseLocalDateTime13(long timestamp, ZoneId zoneId) { Instant instant = Instant.ofEpochMilli(timestamp); - ZoneId zone = ZoneId.systemDefault(); - return LocalDateTime.ofInstant(instant, zone); + return LocalDateTime.ofInstant(instant, zoneId); } /** @@ -270,9 +282,32 @@ public class DateTimeUtil { * @return */ public static LocalDateTime parseLocalDateTime10(long timestamp) { + return parseLocalDateTime10(timestamp, ZoneId.systemDefault()); + } + + /** + * Long 转 LocalDateTime + * + * @param timestamp 10位(秒) + * @param zoneId 时区 + * @return + */ + public static LocalDateTime parseLocalDateTime10(long timestamp, ZoneId zoneId) { Instant instant = Instant.ofEpochMilli(timestamp * 1000); - ZoneId zone = ZoneId.systemDefault(); - return LocalDateTime.ofInstant(instant, zone); + return LocalDateTime.ofInstant(instant, zoneId); + } + + /** + * UTC(格林威治,标准)时间 + * + * @param timestamp 13位(毫秒)/ 10位(秒) + * @return + */ + public static LocalDateTime parserUTC(Long timestamp) { + if (String.valueOf(timestamp).length() == 10) { + timestamp = timestamp * 1000; + } + return parseLocalDateTime13(timestamp, ZoneId.of("UTC")); } /** @@ -299,6 +334,7 @@ public class DateTimeUtil { return instant.toEpochMilli(); } + /** * 格式化时间
* 格式 yyyy-MM-dd HH:mm:ss @@ -351,23 +387,69 @@ public class DateTimeUtil { return df.format(dateTime); } + /** + * 获取UTC(格林威治,标准)时间 + * + * @param date + * @return + */ + public static LocalDateTime convertUTC(LocalDateTime date) { + return convertTimezone(date, null, "UTC"); + } - /** public static void main(String[] args) { - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - System.out.println(df.format(zonedDateTime2Date(ZonedDateTime.now()))); - System.out.println(df2.format(date2ZonedDateTime(new Date()))); + /** + * 时区转换(当前时区) + * + * @param date 时间 + * @param zoneId 转换时区 + * @return + */ + public static LocalDateTime convertTimezone(LocalDateTime date, String zoneId) { + return convertTimezone(date, null, zoneId); + } - System.out.println(getWeek4First()); - System.out.println(format(getWeek4First(LocalDate.parse("2018-02-10")).atTime(LocalTime.MIN))); - System.out.println(format(getWeek4Last(LocalDate.parse("2018-02-10")).atTime(LocalTime.MAX))); - System.out.println(format(getMonth4First().atTime(LocalTime.MIN))); - System.out.println(format(getMonth4Last().atTime(LocalTime.MAX))); + /** + * 时区转换 + * + * @param date 时间 + * @param currentZoneId 当前时间的时区 + * @param targetZoneId 转换时区 + * @return + */ + public static LocalDateTime convertTimezone(LocalDateTime date, String currentZoneId, String targetZoneId) { + ZoneId currentZone; + if (currentZoneId == null) { + currentZone = ZoneId.systemDefault(); + } else { + currentZone = ZoneId.of(currentZoneId); + } + ZoneId targetZone = ZoneId.of(targetZoneId); + return date.atZone(currentZone).withZoneSameInstant(targetZone).toLocalDateTime(); + } - System.out.println(format(getYear4First().atTime(LocalTime.MIN))); - System.out.println(format(getYear4Last().atTime(LocalTime.MAX))); - }*/ + /*public static void main(String[] args) throws ParseException { + System.out.println(parserUTC(1684140338161L)); + System.out.println(convertUTC(LocalDateTime.now())); + Date date = DateUtil.str2dateTime("2023-05-15 08:28:05.327"); + LocalDateTime localDateTime = parseLocalDateTime(date); + System.out.println(date); + System.out.println(localDateTime); + LocalDateTime utc = convertTimezone(localDateTime, "UTC", "Asia/Shanghai"); + System.out.println(utc); + + System.out.println(getWeek4First()); + System.out.println(format(getWeek4First(LocalDate.parse("2018-02-10")).atTime(LocalTime.MIN))); + System.out.println(format(getWeek4Last(LocalDate.parse("2018-02-10")).atTime(LocalTime.MAX))); + + System.out.println(format(getMonth4First().atTime(LocalTime.MIN))); + System.out.println(format(getMonth4Last().atTime(LocalTime.MAX))); + + System.out.println(format(getYear4First().atTime(LocalTime.MIN))); + System.out.println(format(getYear4Last().atTime(LocalTime.MAX))); + + }*/ } diff --git a/src/main/java/com/yexuejc/base/util/DateUtil.java b/src/main/java/com/yexuejc/base/util/DateUtil.java index 7cd93fe..4a81ce7 100644 --- a/src/main/java/com/yexuejc/base/util/DateUtil.java +++ b/src/main/java/com/yexuejc/base/util/DateUtil.java @@ -3,6 +3,7 @@ package com.yexuejc.base.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.ZoneId; import java.util.Calendar; import java.util.Date; import java.util.Locale; @@ -191,4 +192,44 @@ public class DateUtil { return calendar.getTime(); } + /** + * 获取UTC(格林威治,标准)时间 + * + * @param date + * @return + */ + public static Date convertUTC(Date date) { + return convertTimezone(date, null, "UTC"); + } + + /** + * 时区转换(当前时区) + * + * @param date 时间 + * @param zoneId 转换时区 + * @return + */ + public static Date convertTimezone(Date date, String zoneId) { + return convertTimezone(date, null, zoneId); + } + + /** + * 时区转换 + * + * @param date 时间 + * @param currentZoneId 当前时间的时区 + * @param targetZoneId 转换时区 + * @return + */ + public static Date convertTimezone(Date date, String currentZoneId, String targetZoneId) { + ZoneId currentZone; + if (currentZoneId == null) { + currentZone = ZoneId.systemDefault(); + } else { + currentZone = ZoneId.of(currentZoneId); + } + ZoneId targetZone = ZoneId.of(targetZoneId); + return Date.from(date.toInstant().atZone(currentZone).withZoneSameInstant(targetZone).toInstant()); + } + }