1.简介
包 java.time
涵盖了所有处理日期(date),时间(time),日期/时间(datetime),时区(zone),时刻(instant),间隔(duration)与时钟(clock)的操作。
2.使用方式
- 日期(年月日)
java.time.LocalDate
- 时间(时分秒)
java.time.LocalTime
- 日期时间(年月日时分秒)
java.time.LocalDateTime
- 时间戳 java.time.Instant
- 时间间隔 java.time.Duration
- 日期间隔 java.time.Period
- 格式转换 java.time.format.DateTimeFormatter
- 时区 java.time.ZonedDateTime java.time.ZoneId【查看支持的时区】
// 获取当前日期时间
// 2019-04-26T11:27:00.348
LocalDateTime dateTime = LocalDateTime.now();
// 将当前日期时间减去两天
// 2019-04-24T11:27:00.348
dateTime = now.minusDays(2);
// 将当前日期时间加上五天
// 2019-05-01T11:27:00.348
dateTime = now.plusDays(5);
// 输出当前日期时间的年份
// 2019
now.getYear();
// 构造一个指定日期时间的对象.
// 2019-10-23T08:20
dateTime = LocalDateTime.of(2019, 10, 23, 8, 20);
// 获取当前时间的时间戳
// 2019-04-26T03:28:57.758Z
Instant instant = Instant.now();
// 既然中国在东八区,则要偏移8个小时,这样子获取到的时间才是自己电脑的时间
// 2019-04-26T11:28:57.758+08:00
OffsetDateTime dateTime = instant.atOffset(ZoneOffset.ofHours(8));
// 转换成毫秒,如果是当前时间的时间戳,结果跟System.currentTimeMillis()是一样的
// 1556249337758
long milli = instant.toEpochMilli();
LocalTime start = LocalTime.now();
try {
//让线程睡眠3s
Thread.sleep(3000);
} catch (Exception e) {
}
LocalTime end = LocalTime.now();
// 获取end和start的时间间隔
// PT3S
Duration duration = Duration.between(start, end);
//起始时间
LocalDate start = LocalDate.of(2018, 3, 4);
//终止时间
LocalDate end = LocalDate.of(2019, 8, 23);
//输出P1Y5M19D,Y代表年,M代表月,D代表日
Period period = Period.between(start, end);
// 日期格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 获取当前日期时间
//2019-04-26T13:29:54.871
LocalDateTime now = LocalDateTime.now();
// 格式日期时间
// 2019-04-26 11:53:38
String strNow = now.format(dtf);
// 将字符串转换成日期
//2019-04-26
LocalDate.parse(strNow, dtf);
DateTimeFormatter format = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.toFormatter();
//2019-01-01T00:10:10
LocalDateTime.parse("2019-01-01 10:10:10", format);
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.parseDefaulting(ChronoField.HOUR_OF_DAY,0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR,0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE,0)
.toFormatter();
//2019-01-01T00:10:10
LocalDateTime.parse("2019-01-01 00:10:10", formatter);
// 基于JDK1.8进行时间格式化(字符串转ISO-8601标准时间格式)
//Jdk7,将时间字符串转化为标准时间格式
String accessTime = "20181212162923";
if (accessTime != null && accessTime.trim().length() != 0) {
Date time = new Date();
//2018-09-09 19:15:14
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US);
try {
time = sdf.parse(accessTime);
} catch (ParseException e) {
}
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
accessTime = sdf2.format(time);
System.out.println(accessTime);
}
//输出:2018-12-12T16:29:23+08:00
//Jdk8,将字符串转换为标准的ISO-8601的时间格式
String timestamp = "20181212162923";
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
LocalDateTime dt1 = LocalDateTime.parse(timestamp,formatter);
ZoneOffset offset = ZoneOffset.of("+08:00");
OffsetDateTime date = OffsetDateTime.of(dt1,offset);
DateTimeFormatter formatter2=DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
timestamp=date.format(formatter2);
System.out.println(timestamp);
} catch (DateTimeParseException ex) {
ex.printStackTrace();
}
//结果:2018-12-12T16:29:23+08:00
//字符串-->>LocalDateTime
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse("2017-07-20 15:27:44", dateTimeFormatter);
System.out.println("字符串转LocalDateTime: " + localDateTime);
//输出:字符串转LocalDateTime: 2017-07-20T15:27:44
//LocalDateTime-->>字符串
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateString = dateTimeFormatter2.format(LocalDateTime.now());
System.out.println("日期转字符串: " + dateString);
//输出:日期转字符串: 2019-07-17 09:35:53
//获取时区
System.out.println(LocalDateTime.now(ZoneOffset.systemDefault()).atZone(ZoneOffset.systemDefault()).getOffset());
//输出:+08:00