一、获取8位时间
LocalDate可以获取到年月日等信息。我们可以利用这个信息来获取一个8位的时间,并将其转换为时间戳。
LocalDate now = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String formatNow = now.format(formatter);
在这个例子中,我们利用`LocalDate.now()`获取当前的年月日信息。然后,使用`DateTimeFormatter`将其格式化为“yyyyMMdd”的形式。最终,通过`format()`方法获取到一个8位的时间。
二、LocalTime转Date
如果我们已经有了一个LocalTime的实例,那么我们可能需要将其转换成Date格式,以便进行时间计算等操作。下面是一个简单的示例:
LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate,localTime);
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
Date date = Date.from(instant);
首先,我们获取了当前的`LocalTime`和`LocalDate`。然后,使用`LocalDateTime`将其组合成`LocalDateTime`。接着,获取默认时区,并通过`atZone()`方法将`LocalDateTime`转换为`ZonedDateTime`。最后,通过`toInstant()`和`from()`方法将`ZonedDateTime`转换为`Date`类型。
三、Date转LocalDate
与上面相反,有时我们需要将一个Date类型的时间转换为LocalDate类型。下面是一个简单的示例:
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
LocalDate localDate = localDateTime.toLocalDate();
首先,我们创建了一个`Date`类型的实例。然后,通过`toInstant()`方法将其转换为`Instant`格式。接着,获取默认时区,并使用`ofInstant()`将`Instant`转换为`LocalDateTime`格式。最后,通过`toLocalDate()`方法将`LocalDateTime`转换为`LocalDate`类型。
四、LocalDate转Date
如果我们已经有了一个LocalDate类型的实例,也可以将其转换为Date类型,具体方法如下:
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
Date date = Date.from(instant);
首先,我们获取当前的`LocalDate`实例。然后,获取默认时区,并将`LocalDate`转换为0点整的`LocalDateTime`。接着,通过`atZone()`将其转换为`ZonedDateTime`类型,最终转换为`Instant`类型和`Date`类型。
五、LocalDate转时间戳
最后,我们来到了本文的主题:如何使用`LocalDate`转换为时间戳。
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
long stamp = instant.toEpochMilli() / 1000;
首先,我们还是获取了当前的`LocalDate`实例。然后,获取默认时区,并将`LocalDate`转换为0点整的`LocalDateTime`。接着,通过`atZone()`将其转换为`ZonedDateTime`类型。然后,利用`toInstant()`将`ZonedDateTime`转换为`Instant`类型,并使用`toEpochMilli()`获取时间戳(毫秒数)。最后,我们除以1000将毫秒数转换为秒数,得到我们想要的时间戳。