Java8【有与无】【F1】日期时间 API(一站式服务)

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴 韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值