关于LocalDateTime最常用方法和时间转换方式
作者:大脑补丁
Java8版本引入了LocalDateTime和LocalDate类,极大地方便了日期和时间的处理,本文主要介绍了字符串与LocalDateTime的互转,Long型时间戳与UTC时间字符串的转换,获取今天、某天的起止时间,自定义时间的设置,以及LocalDateTime与Date的相互转换等常用方法
LocalDateTime最常用方法和时间转换
Java 8 版本以后,新增了了LocalDateTime和了LocalDate类,转换方便不亚于jodaTIme。
LocalDateTime方法有很多,本文将开发中最常用的一些时间转换列举出来,并给出转换后的示例,希望大家可以转换时参考使用。
字符串转LocalDateTime
public static LocalDateTime parseStringToDateTime(String time, String format) { DateTimeFormatter df = DateTimeFormatter.ofPattern(format); return LocalDateTime.parse(time, df); }
LocalDateTime转字符串
public static String getDateTimeToString(LocalDateTime localDateTime, String format) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); return localDateTime.format(formatter); }
测试:
若毫秒位不为000则显示毫秒
String utc = getUTCMillisecondFromTimestamp(1539718265123); System.out.println(utc); 输出:2018-10-16T19:31:05.123Z
若毫秒为000则不显示毫秒,
String utc = getUTCMillisecondFromTimestamp(1539718265000); System.out.println(utc); 输出:2018-10-16T19:31:05Z
Long型时间戳(15位)转UTC时间字符串
/** * 将UTC时间戳转为UTC字符串(精确到秒) * * @param timestamp * @return */ public static String getUTCStrFromTimestamp(long timestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 北京时间:ZoneId.of("UTC+8");系统默认时间:ZoneId.systemDefault() LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.of("UTC")); String utc = localDateTime.format(formatter); return utc; }
测试:
String utc = getUTCStrFromTimestamp(1539718265123); System.out.println(utc); 输出:2018-10-16T19:31:05Z
Long型时间戳(15位)转UTC时间字符串
/** * 将时间戳转为UTC字符串(若毫秒为000则不显示毫秒,若毫秒位不为000则显示毫秒) * * 返回格式:2018-10-16T19:31:05.123Z * * @param timestamp * @return */ public static String getUTCMillisecondFromTimestamp(long timestamp) { Instant instant = Instant.ofEpochMilli(timestamp); String utcString = instant.toString(); return utcString; }
获取今天的起止时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); String startTime = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0).format(formatter); String endTime = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(999_999_999).format(formatter);
返回目标月份的最后一天
/** * 返回目标月份的最后一天 * * @param sourceDate 目标月份 * @param monthOffset 月份偏移量 * @return */ private LocalDate getLastDateOfMonth(LocalDate sourceDate, int monthOffset) { return sourceDate.plusMonths(monthOffset).with(TemporalAdjusters.lastDayOfMonth()); }
获取某天的起止时间(优雅)
LocalDate date = LocalDate.of(2021, 4, 20); LocalDateTime startTime = LocalDateTime.of(date, LocalTime.MIN); LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);
LocalDateTime设置自定义时间
/** * 获得一个(毫秒)时间戳的十分钟起始时间戳 * * 如:输入1534930875000(2018-08-22 17:41:15)的时间戳返回1534930800000(2018-08-22 17:40:00)的时间戳 * * @param timestrap * * * @return */ public static long getTenMinuteStartTimestrap(long timestamp) { LocalDateTime localDateTime = getLocalDateTimeByTimestamp(timestamp); int minute = localDateTime.getMinute(); // 分钟个位数置为0 int minute_floor = minute / 10 * 10; LocalDateTime startLocalDateTime = localDateTime.withMinute(minute_floor).withSecond(0).withNano(0); long startTimestamp = getTimestampByLocalDateTime(startLocalDateTime); return startTimestamp; }
Long毫秒时间戳转LocalDateTime
/** * Long毫秒时间戳转LocalDateTime */ public static LocalDateTime getLocalDateTimeByTimestamp(long timestamp) { Instant instant = Instant.ofEpochMilli(timestamp); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); return localDateTime; }
根据LocalDateTime获取毫秒时间戳
/** * 根据毫秒时间戳获取LocalDateTime * @param localDateTime * @return */ public static long getTimestampByLocalDateTime(LocalDateTime localDateTime) { long timestamp = localDateTime.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli(); return timestamp; }
Long时间戳根据时区转为当地日期
/** * 时间戳根据时区转为当地日期 * @param timestamp * @param timezone * @return */ public static Date getLocalDateByTimezone(long timestamp, int timezone) { Instant instant = Instant.ofEpochMilli(timestamp); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); // 当地时间 LocalDateTime localDate = localDateTime.plusHours(timezone); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); String localDateTimeStr = df.format(localDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); Date date = null; try { date = sdf.parse(localDateTimeStr); } catch (ParseException e) { e.printStackTrace(); } return date; }
LocalDateTime转Date
注意:系统所在时区
Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
Date转LocalDateTime
Date todayDate = new Date(); LocalDateTime ldt = todayDate.toInstant() .atZone( ZoneId.systemDefault() ) .toLocalDateTime();
毫秒转秒(时间戳)
long second = Instant.ofEpochMilli(1636338645000L).getEpochSecond();
秒转毫秒(时间戳)
long second = Instant.ofEpochSecond(1636338645L).toEpochMilli();
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。