时间戳 -> 字符串的三种方式
//第一种:
public static String longToStr(Long timeStamp, String pattern){
return new SimpleDateFormat(pattern).format(timeStamp);
}
// 第二种:
public static String longToStr(Long timeStamp, String pattern){
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeStamp), ZoneOffset.ofHours(8));
return DateTimeFormatter.ofPattern(pattern).format(localDateTime);
}
// 第三种:
// 定义静态常量
public static final DateTimeFormatter YYYY_MM_DD_HH_MM_SS_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static String longToStr(Long timeStamp){
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(timeStamp/1000L, 0, ZoneOffset.ofHours(8));
return YYYY_MM_DD_HH_MM_SS_FORMATTER.format(localDateTime);
}
- 性能方面:3 > 2 > 1
- 灵活性方面(可自定义pattern):2 = 1 > 3
- 根据需求使用,如果转换pattern基本固定,推荐使用3, 如果有传入pattern的需要,推荐使用2,任何情况下,不推荐使用1。
字符串 -> 时间戳
// 第一种:
// 定义静态常量:
public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static long strToLong(String timeStr){
TemporalAccessor parse = FORMATTER.parse(timeStr);
return LocalDateTime.from(parse).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
}
// 第二种:
/**
* 字符串转时间戳
* 使用传参样例,patternType传什么值,取决于pattern是否带有时间,patternType传错会报错:
* strToLong("2022-06-10 09:00:00", "yyyy-MM-dd HH:mm:ss", 1)
* strToLong("2022-06-10", "yyyy-MM-dd", 2)
*
* @param time 时间字符串
* @param pattern 转换格式
* @param patternType 转换类型,1代表pattern包含日期+时间,2代表pattern仅包含日期
* @return
*/
public static long strToLong(String time, String pattern, Integer patternType){
TemporalAccessor parse = DateTimeFormatter.ofPattern(pattern).parse(time);
switch (patternType) {
case 1:
return LocalDateTime.from(parse).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
case 2:
return LocalDate.from(parse).atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
default:
return 0;
}
}
基本概念
- ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
- Instant: 用来表示时间线上的一个点(瞬时)
- LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
- LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
- LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的
更多api参考:LocalDateTime用法