/**
* LocalDateTime, LocalDate, Instant, Long 相互转换
*/
@Test
fun transform() {
val localDateTime = LocalDateTime.now()
// LocalDateTime to LocalDate
println(localDateTime.toLocalDate())
// LocalDateTime to Instant
println(localDateTime.toInstant(ZoneOffset.UTC))
// LocalDateTime to Long
println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli())
val localDate = LocalDate.now()
// LocalDate to LocalDateTime
println(localDate.atTime(LocalTime.now()))
// LocalDate to Instant
println(localDate.atTime(LocalTime.now()).toInstant(ZoneOffset.UTC))
// LocalDate to Long
println(localDate.atTime(LocalTime.now()).toInstant(ZoneOffset.UTC).toEpochMilli())
val instant = Instant.now()
// Instant to LocalDateTime
println(LocalDateTime.ofInstant(instant, ZoneId.systemDefault()))
// Instant to LocalDate
println(LocalDate.ofInstant(instant, ZoneId.systemDefault()))
// Instant to Long
println(instant.toEpochMilli())
val milli: Long = Instant.now().toEpochMilli()
// Long to LocalDateTime
println(LocalDateTime.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault()))
// Long to LocalDate
println(LocalDate.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault()))
// Long to Instant
println(Instant.ofEpochMilli(milli))
}
在我们实际开发过程中,经常会涉及到时间的处理,下面我整理了一些常用的转换,希望能帮助到各位道友
话不多说,上代码!!!
java8全新的日期和时间API
DateTimeFormatter
和 SimpleDateFormat
区别
- SimpleDateFormat:非线程安全的
-
DateTimeFormatter:线程安全的
//自定义格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime localDateTime = LocalDateTime.parse("2019-07-31 00:00:00", dtf);
LocalDate localDate = LocalDate.parse("2019-07-31", dtf1);
Date date = Date.from(LocalDateTime.parse("2019-07-31 00:00:00", dtf).atZone(ZoneId.systemDefault()).toInstant());
System.err.println(localDateTime);
System.err.println(localDate);
System.err.println(date);
/* 2019-07-31T00:00
2019-07-31
Wed Jul 31 00:00:00 CST 2019
*/
LocalDateTime 转localDate
LocalDate localDate = LocalDateTime.now().toLocalDate();
LocalDateTime 转 Long
long milli = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
LocalDateTime 转 Date
Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
LocalDateTime 转 String
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = LocalDateTime.now().format(dtf);
LocalDate 转 LocalDateTime
LocalDateTime of = LocalDateTime.of(localDate, LocalTime.parse("00:00:00"));
System.err.println(of);
LocalDate 转 Long
long milli = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
System.err.println(milli);
LocalDate 转 Date
Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
System.err.println(date);
LocalDate 转 String
String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.err.println(format);
Date 转 LocalDateTime
Date date = new Date();
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
System.err.println(localDateTime);
Date 转 Long
Date date = new Date();
long time = date.getTime();
System.err.println(time);
Date 转 LocalDate
Date date = new Date();
LocalDate localDate = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
//先将date转为了localDateTime,随后toLocalDate
Date 转 String
Date date = new Date();
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.format(date);
String 转 LocalDateTime
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String strTime = "2020-11-04 00:00:00";
LocalDateTime localDateTime = LocalDateTime.parse(strTime, dtf);
System.err.println(localDateTime);
String 转 LocalDate
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String strTime = "2020-11-04 00:00:00";
LocalDate localDate = LocalDateTime.parse(strTime, dtf).toLocalDate();
System.err.println(localDate);
String 转 Date
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String strTime = "2020-11-04 00:00:00";
Date date = Date.from(LocalDateTime.parse(strTime, dtf).atZone(ZoneId.systemDefault()).toInstant());
System.err.println(date);
Long 转 LocalDateTime
long milli = 1604458818000L;
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault());
System.err.println(localDateTime);
Long 转 LocalDate
long milli = 1604458818000L;
LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault()).toLocalDate();
System.err.println(localDate);
LocalDateTime获取前、后的日子
LocalDateTime.now().minusDays(2); //两天前的日期
LocalDateTime.now().plusDays(2); //两天后的日期
Date date = new Date();//获取当前时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, -1);//当前时间减去一年,即一年前的时间
calendar.add(Calendar.MONTH, -1);//当前时间前去一个月,即一个月前的时间
calendar.getTime();//获取一年前的时间,或者一个月前的时间