本文是依据网络文章进行的汇总,持续更新帖
为什么要学 Java 8 的日期时间方法呢?SimpleDateFormat 不是很好用吗?我相信这种声音不在少数,原因有:
- SimpleDateFormat 非线程安全
- 拥抱新技术,没有什么不好的,这才是 Stay hungry
获取当前时间
Long millisecond = Instant.now().toEpochMilli(); // 精确到毫秒
Long second = Instant.now().getEpochSecond();// 精确到秒
将 Long 类型的时间戳转成字符串
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(time),ZoneId.systemDefault()));
将字符串时间转成 Long 类型的时间戳
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse("2018-05-29 13:52:50", ftf);
LocalDateTime.from(parse).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
Date 与 LocalDateTime 互转
// 将 java.util.Date 转换为 java8 的 java.time.LocalDateTime, 默认时区为东 8 区
public static LocalDateTime dateConvertToLocalDateTime(Date date) {return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();}
// 将 java8 的 java.time.LocalDateTime 转换为 java.util.Date,默认时区为东 8 区
public static Date localDateTimeConvertToDate(LocalDateTime localDateTime) {return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
}
日期变换
/**
* 取本月第一天
*/
public static LocalDate firstDayOfThisMonth() {LocalDate today = LocalDate.now();
return today.with(TemporalAdjusters.firstDayOfMonth());
}
/**
* 取本月第 N 天
*/
public static LocalDate dayOfThisMonth(int n) {LocalDate today = LocalDate.now();
return today.withDayOfMonth(n);
}
/**
* 取本月最后一天
*/
public static LocalDate lastDayOfThisMonth() {LocalDate today = LocalDate.now();
return today.with(TemporalAdjusters.lastDayOfMonth());
}
/**
* 取本月第一天的开始时间
*/
public static LocalDateTime startOfThisMonth() {return LocalDateTime.of(firstDayOfThisMonth(), LocalTime.MIN);
}
/**
* 取本月最后一天的结束时间
*/
public static LocalDateTime endOfThisMonth() {return LocalDateTime.of(lastDayOfThisMonth(), LocalTime.MAX);
Java 8 时间,字符串和 Long 时间戳互转
Java8 LocalDateTime 获取时间戳(毫秒 / 秒)、LocalDateTime 与 String 互转、Date 与 LocalDateTime 互转