Java笔记之java8时间格式转换以及计算时间差

1.将LocalDateTime转为自定义的时间格式的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.
public static String getDateTimeAsString(LocalDateTime localDateTime, String format) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(formatter);
}


2.
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.now();
String localTime = df.format(time);
LocalDateTime ldt = LocalDateTime.parse("2018-06-01 10:12:05",df);
System.out.println("LocalDateTime转成String类型的时间:"+localTime);
System.out.println("String类型的时间转成LocalDateTime:"+ldt);

2.将long类型的timestamp转为LocalDateTime

1
2
3
4
5
6

public static LocalDateTime getDateTimeOfTimestamp(long timestamp) {
Instant instant = Instant.ofEpochMilli(timestamp);
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}

3.将LocalDateTime转为long类型的timestamp

1
2
3
4
5
6

public static long getTimestampOfDateTime(LocalDateTime localDateTime) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
return instant.toEpochMilli();
}

4.将某时间字符串转为自定义时间格式的LocalDateTime

1
2
3
4
5

public static LocalDateTime parseStringToDateTime(String time, String format) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(time, df);
}

Java 8中表示日期和时间的类主要的有:

Instant:表示时刻,不直接对应年月日信息,需要通过时区转换
LocalDateTime: 表示与时区无关的日期和时间信息,不直接对应时刻,需要通过时区转换
LocalDate:表示与时区无关的日期,与LocalDateTime相比,只有日期信息,没有时间信息
LocalTime:表示与时区无关的时间,与LocalDateTime相比,只有时间信息,没有日期信息
ZonedDateTime: 表示特定时区的日期和时间
ZoneId/ZoneOffset:表示时区

与字符串互转

1
2
3
4
5
6
7

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.now();
String localTime = df.format(time);
LocalDateTime ldt = LocalDateTime.parse("2018-06-01 10:12:05",df);
System.out.println("LocalDateTime转成String类型的时间:"+localTime);
System.out.println("String类型的时间转成LocalDateTime:"+ldt);

与Date互转

1
2
3
4
5
6
7
8
9
10
java.util.Date date = new java.util.Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);


LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
java.util.Date date = Date.from(instant);

与LocalDate互转

1
2
3
4
5
6
7
8
LocalDateTime now = LocalDateTime.now();
LocalDate localDate = now.toLocalDate();


LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
java.util.Date date = Date.from(instant);

Date与LocalDate,LocalDateTime 之间的转换工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.libstar.lsp.find.utils;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;


public class LocalDateUtil {

/**
* LocalDate转Date
* @param localDate
* @return
*/
public static Date localDate2Date(LocalDate localDate) {
if (null == localDate) {
return null;
}
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
return Date.from(zonedDateTime.toInstant());

}

/**
* Date转LocalDate
* @param date
*/
public static LocalDate date2LocalDate(Date date) {
if (null == date) {
return null;
}
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

}

/**
* Date转换为LocalDateTime
* @param date
*/
public static LocalDateTime date2LocalDateTime(Date date){
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
return localDateTime;
}

/**
* LocalDateTime转换为Date
* @param localDateTime
*/
public static Date localDateTime2Date( LocalDateTime localDateTime){
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
Date date = Date.from(zdt.toInstant());
return date;
}

}

Java8计算日期时间差

java8中计算时间差的三个函数

    1. Period
    1. Duration
    1. ChronoUnit

1. Period类

Period类方法getYears(),getMonths()和getDays()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.time.LocalDate; 
import java.time.Month;
import java.time.Period;




LocalDate today = LocalDate.now();
System.out.println("Today : " + today);
LocalDate birthDate = LocalDate.of(1995, Month.MARCH, 12);
System.out.println("BirthDate : " + birthDate);

Period p = Period.between(birthDate, today);
System.out.printf("年龄 : %d 年 %d 月 %d 日", p.getYears(), p.getMonths(), p.getDays());

结果输出:

today : 2019-07-12
BirthDate : 1995-03-12
年龄 : 24 年 ** 月 ** 日

2.Duration类

提供基于时间的值(如秒,纳秒)测量时间量的方法

1
2
3
4
5
6
7
8
9
10
11
12
import java.time.Duration; 
import java.time.Instant;


Instant inst1 = Instant.now();
System.out.println("Inst1 : " + inst1);
Instant inst2 = inst1.plus(Duration.ofSeconds(10));
System.out.println("Inst2 : " + inst2);

System.out.println("Difference in milliseconds : " + Duration.between(inst1, inst2).toMillis());

System.out.println("Difference in seconds : " + Duration.between(inst1, inst2).getSeconds());

结果输出:

Inst1 : 2019-07-12T22:54:45.085Z
Inst2 : 2019-07-12T22:54:55.085Z
Difference in milliseconds : 10000
Difference in seconds : 10

3. ChronoUnit类

ChronoUnit类可用于在单个时间单位内测量一段时间,例如天数或秒。

例子:
使用between()方法来查找两个日期之间的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.ChronoUnit;




LocalDate startDate = LocalDate.of(1995, Month.MARCH, 12);
System.out.println("开始时间 : " + startDate);

LocalDate endDate = LocalDate.of(2019, Month.JULY, 12);
System.out.println("结束时间 : " + endDate);

long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);
System.out.println("两天之间的差在天数 : " + daysDiff);

结果输出:
开始时间 : 1995-03-12
结束时间 : 2019-07-12
两天之间的差在天数 : 8888

-------------本文结束感谢您的阅读-------------

本文标题:Java笔记之java8时间格式转换以及计算时间差

文章作者:Jason

发布时间:2019年07月12日 - 22:07

最后更新:2019年07月12日 - 23:07

原始链接:https://jasonssun.github.io/2019/07/12/Java笔记之java8时间格式转换以及计算时间差/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。