java epoch time_廖雪峰Java7处理日期和时间-3java.time的API-2ZonedDateTime

ZonedDatetime = LocalDateTime + ZoneId

ZonedDateTime:带时区的日期和时间

ZoneId:新的API定义的时区对象(取代几句的java.util.TimeZone)

Instant:时刻对象(epoch seconds)

2184fe53201f96862fb514bc1646f59b.png

1.ZonedDateTime对象为携带时区的日期时间

now()

getZone()

public static void main(String[] args) {

ZonedDateTime zbj = ZonedDateTime.now();

System.out.println("当前时区的日期和时间:\t\t"+zbj);

ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York"));

System.out.println("纽约时区的当前时间和日期:\t"+zny);

}

69ba4f0d8536417e3c31a9caf75e0a37.png

## 2.添加时区LocalDateTime->ZonedDateTime

atZone()只是为日期时间添加时区,只是时区不一样

```#java

public static void main(String[] args) {

LocalDateTime ldt = LocalDateTime.of(2016,11,30,15,16,17);

ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());

System.out.println("当前时区的日期和时间:\t\t"+bj);

ZonedDateTime ny = ldt.atZone(ZoneId.of("America/New_York"));

System.out.println("纽约时区的当前时间和日期:\t"+ny);

}

```

b647a8993019747e678bd13310fa4079.png

## 3.时区转换

withZoneSameInstant()将某一时区的时刻转换为目标时区的时刻

```#java

public static void main(String[] args) {

LocalDateTime ldt = LocalDateTime.of(2016,11,30,15,16,17);

ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());

System.out.println("当前时区的日期和时间:\t\t"+bj);

ZonedDateTime ny = bj.withZoneSameInstant(ZoneId.of("America/New_York"));

System.out.println("纽约时区的当前时间和日期:\t"+ny);

}

```

0038ad1558166232f77f13f0c1685ac1.png

## 4.Instant对象表示时刻

获取Instant对象:

* 使用Instant获取,如Instant.now(),Instant.ofEpochMilli()...

* 通过ZonedDateTime对象获取,如ZonedDateTime.now().toInstant()

* 获取epoch time,Instant.getEpochSecond()

```#java

public static void main(String[] args) {

Instant ins = Instant.now();

System.out.println(ins);

Instant ins2 = ZonedDateTime.now().toInstant();//ZonedDateTime对象通过toInstant就可以转化为Instant对象

System.out.println(ins2);

ZonedDateTime zdt = ins.atZone(ZoneId.of("Z"));//Instant对象通过atZone就可以转换为ZonedDateTime对象

System.out.println(zdt);//将Instant对象转换为ZonedDateTime对象,打印结果同Instant对象

long epoch = ins.getEpochSecond();//通过getEpochSecond()返回一个long类型的整形

System.out.println(epoch);

ZonedDateTime zdt2 = ZonedDateTime.now();

System.out.println(zdt2);

}

```

5397ae237ed4bd850a639a789399b2cf.png

## 5.Instant、ZonedDateTime、long的互相转换

e41f6ac8c210fbc24e16911bae26437a.png

```#java

public static void main(String[] args) {

ZonedDateTime zdt = ZonedDateTime.now();

//ZonedDateTime Instant

Instant ins1 = zdt.toInstant();

ZonedDateTime zdt1 = ins1.atZone(ZoneId.systemDefault());

//Instant long

long l1 = ins1.toEpochMilli();

Instant ins2 = Instant.ofEpochMilli(l1);

//long ZonedDateTime

long l2 = ZonedDateTime.now().toEpochSecond();

ZonedDateTime zdt2 = Instant.ofEpochMilli(l2).atZone(ZoneId.systemDefault());

System.out.println(zdt1+"\t"+ins1+"\t"+l1+"毫秒");

System.out.println(zdt2+"\t"+ins2+"\t"+l2+"秒");

}

aeca05592bf29911d9c5446f46a70514.png

## 6.TemporalAmount

表示一段时间:1天/2小时/30分钟,有两个子类:

* Duration:Days Hours Minutes Seconds Mills Nanos

* Peroid:Day Month Week Year

可以加减一个TemporalAmount对象

* plus(TemporalAmount)

* minus(TemporalAmount)

```#java

public static void main(String[] args) {

Period towDays = Period.ofDays(2);

Duration oneHour = Duration.ofHours(1);

Duration fiveMin = Duration.ofMinutes(5);

ZonedDateTime zdt = ZonedDateTime.now().minus(towDays).plus(oneHour).plus(fiveMin);

System.out.println(ZonedDateTime.now());

System.out.println(zdt);

}

1248412864cab9d93792a58ded74faeb.png

7.java.time提供的其他Class

ZoneOffset

OffsetDateTime

OffsetTime

ChronoLocalDate/ChronoLocalDateTime:用于实现其他历法

8.总结:

ZonedDateTime就是LocalDateTime关联ZoneId

ZonedDateTime可以做时区转换,注意不要自己试图通过加减时区偏移量计算。因为时区的转换不仅设计到夏令时,还包括历史夏令时的改动。

ZoneId表示时区

Instant表示时刻(内部用long表示epoch second)

ZonedDateTime、Instant、Long可以相互转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值