localdate转date时区问题_Date和LocalDate互转

一.简述

Date对象表示特定的日期和时间,而LocalDate(Java8)对象只包含没有任何时间信息的日期。

因此,如果我们只关心日期而不是时间信息,则可以在Date和LocalDate之间进行转换。

二.Date转LocalDate

如果要将Java.util.Date转换为java.time.LocalDate,可以使用以下步骤:

1)将java.util.Date转换为ZonedDateTime。

2)使用它的toLocalDate()方法从ZonedDateTime获取LocalDate。

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21package insping;

import java.time.Instant;

import java.time.LocalDate;

import java.time.ZoneId;

import java.util.Date;

public class Test {

public static void main(String[] args) {

Date date = new Date();

Instant instant = date.toInstant();

ZoneId zoneId = ZoneId.systemDefault();

// atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。

LocalDate localDate = instant.atZone(zoneId).toLocalDate();

System.out.println("Date = " + date);

System.out.println("LocalDate = " + localDate);

}

}

结果:

Date = Fri Jun 16 15:29:05 CST 2017

LocalDate = 2017-06-16

三.LocalDate转Date

现在,如果要将LocalDate转换回java.util.Date,可以使用以下步骤:

1)使用ZonedDateTime将LocalDate转换为Instant。

2)使用from()方法从Instant对象获取Date的实例

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22package insping;

import java.time.LocalDate;

import java.time.ZoneId;

import java.time.ZonedDateTime;

import java.util.Date;

public class Test {

public static void main(String[] args) {

ZoneId zoneId = ZoneId.systemDefault();

LocalDate localDate = LocalDate.now();

ZonedDateTime zdt = localDate.atStartOfDay(zoneId);

Date date = Date.from(zdt.toInstant());

System.out.println("LocalDate = " + localDate);

System.out.println("Date = " + date);

}

}

结果:

LocalDate = 2017-06-16

Date = Fri Jun 16 00:00:00 CST 2017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 8 中的 LocalDate 可以通过 atStartOfDay() 方法换为 Date: ``` LocalDate localDate = LocalDate.now(); Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); ``` 也可以通过 toInstant() 方法直接换: ``` LocalDate localDate = LocalDate.now(); Date date = Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.UTC)); ``` ### 回答2: LocalDateDate的实现可以使用java.time包中的LocalDateDate类提供的方法。 首先,我们需要将LocalDate对象换为LocalDateTime对象,因为LocalDate只包含日期信息,没有具体的时间信息。 ``` LocalDate localDate = LocalDate.now(); //获取当前的LocalDate对象 //将LocalDate对象换为LocalDateTime对象 LocalDateTime localDateTime = localDate.atStartOfDay(); ``` 接下来,我们可以使用LocalDateTime对象创建一个Date对象。 ``` //将LocalDateTime对象换为Date对象 Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); ``` 这里的ZoneId.systemDefault()表示使用系统默认的时区,如果需要使用其他时区可以使用ZoneId.of()方法指定时区。 最后,我们就成功地将LocalDate对象换为Date对象了。 需要注意的是,LocalDateDate分别属于新旧两个不同的日期时间API,它们之间的换需要通过中间的LocalDateTime对象来进行。另外,使用新的java.time包中的日期时间API可以更好地处理日期时间相关的操作和问题,建议在新的项目中使用该API。 ### 回答3: LocalDate类是Java 8中的一个日期类,它表示一个不包含时间的日期,可以通过toEpochDay()方法将其换为一个长整型值表示的日期。而Date类是Java旧版本中的日期类,可以通过将LocalDate换为Instant对象,再换为Date对象来实现LocalDate换为Date。 要将LocalDate换为Date,需要进行以下步骤: 1. 首先,将LocalDate对象换为Instant对象。可以使用atStartOfDay()方法将LocalDate换为LocalDateTime,再使用atZone()方法将其换为ZonedDateTime,最后通过toInstant()方法将ZonedDateTime换为Instant。代码示例如下: ``` LocalDate localDate = LocalDate.now(); Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant(); ``` 2. 然后,将Instant对象换为Date对象。可以通过使用ofInstant()方法将Instant对象换为Date对象。代码示例如下: ``` Date date = Date.from(instant); ``` 通过以上步骤,就可以将LocalDate对象成功换为Date对象。 需要注意的是,Date类中包含了日期和时间信息,而LocalDate只包含日期信息,换为Date后时间信息会被设为午夜零点。另外,Date类是可变的,而LocalDate是不可变的,因此在使用Date类时需要注意线程安全性。 以上就是将LocalDate换为Date的方法,通过使用Java 8的日期类以及换方法,可以很方便地实现这一换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值