直接上代码
UTC时间戳转化系统默认时区的Date,LocalTime,LocalDateTime,LocalDate类型
/**
UTC时间戳转化系统默认时区的Date,LocalTime,LocalDateTime,LocalDate类型
@author:Pierce.Cai
*/
{
public static void main(String[] args)
{
// 获取日历对象
Calendar calendar = Calendar.getInstance();
// 获取系统默认时区
TimeZone tz = TimeZone.getDefault();
// 自定义设置UTC时间戳,更新整个日历对象
calendar.setTimeInMillis(Long.parseLong("1651172445612"));
// 转化系统默认时区格式
calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis()));
// 转为Date
Date date = calendar.getTime();
// Local类型的需要进行一个中间类进行转换
ZonedDateTime zonedDateTime = Instant.ofEpochMilli(calendar.getTimeInMillis()).atZone(ZoneId.systemDefault());
// 转为LocalTime
LocalTime localTime = zonedDateTime.toLocalTime();
// 转为LocalDateTime
LocalDateTime localDatetime = zonedDateTime.toLocalDateTime();
// 转为LocalDate
LocalDate localDate = zonedDateTime.toLocalDate();
}
}
系统默认时区的Date,LocalTime,LocalDateTime,LocalDate类型转化UTC时间戳
/**
系统默认时区的Date,LocalTime,LocalDateTime,LocalDate类型转化UTC时间戳
@author:Pierce.Cai
*/
public class Test
{
public static void main(String[] args)
{
// 获取现在的LocalDateTime 时间
LocalDateTime localDateTime = LocalDateTime.now();
// 转为TimeStamp类型
Timestamp timestamp = Timestamp.valueOf(localDateTime.atZone(ZoneId.systemDefault())
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC)
.toLocalDateTime());
// 获取时间戳
timestamp.getTime();
// 剩下的LocalTime与LocalDate就与LocalDateTime的转化方法一样,只需将这两个类型转化为LocalDateTime即可
// Localtime转为 LocalDateTime
LocalDateTime localDateTime = LocalTime.now().atDate(LocalDate.now());
// LocalDate 转为LocalDateTime
// 需要注意的是LocalDate转化出来的时间是 00:00:00 那么转为UTC则是16:00:00,具体使用哪种看业务需求
LocalDateTime localDateTime = LocalDate.now().atStartOfDay();
// 如果不拿LocalDateTime只是单纯的需要使用上面的转化语句就可以少写一个函数例如:
LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC)
.toLocalDateTime());
// Date类型
// 只需要转一下Instant
Timestamp.valueOf(new Date().toInstant().atZone(ZoneId.systemDefault())
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC)
.toLocalDateTime());
}
}