首页 > 分享 > Java8 Lambda表达式获取当前时间之前的多少天

Java8 Lambda表达式获取当前时间之前的多少天

1.获取当前时间之前的多少天

package lenovo.util;

import org.springframework.util.ObjectUtils;

import java.time.LocalDateTime;

import java.time.LocalTime;

import java.time.format.DateTimeFormatter;

import java.time.temporal.ChronoUnit;

import java.util.ArrayList;

import java.util.List;

public class DateUtils {

public static List<String> getBeforeValueDate(Integer value) {

if (ObjectUtils.isEmpty(value) && value < 1) {

value = 1;

}

LocalTime localTime = LocalTime.of(12, 10);

List<String> list = new ArrayList<>();

for (int i = 0; i < value; i++) {

if (LocalTime.now().isBefore(localTime)) {

LocalDateTime now = LocalDateTime.now().plusDays(-1);

now = now.minus(i, ChronoUnit.DAYS);

list.add(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

} else if (LocalTime.now().isAfter(localTime)) {

LocalDateTime now = LocalDateTime.now();

now = now.minus(i, ChronoUnit.DAYS);

list.add(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

}

}

return list;

}

}

2.Java 8 时间API

在Java8之前,Java中对于日期的操作是不够那么方面的。比如对日期进行加减操作、对日期的格式化、对日期的大小进行判断等。所以会出现Joda Time工具包来帮我们解决问题。
Java8之后,就不需要再引入第三方工具包来处理日期了。
刚开始的时候,看着新的API还是非常不适应的,习惯了之后就会爱上他了。

1.对日期进行加减

Java8中提供了LocalDate、LocalTime和LocalDateTime分别表示日期、时间和日期时间。LocalDate的格式如2018-05-22,LocalTime的格式如15:49:50.494,那么LocalDateTime就是他们的结合体了。
直接看LocalDateTime的例子吧:

LocalDateTime dateTime = LocalDateTime.now();

dateTime.plusDays(3);

dateTime.minusMonths(3);

dateTime.getDayOfWeek();

dateTime.getDayOfMonth();

dateTime.getSecond();

dateTime.with(LocalTime.MIN);

dateTime.with(LocalTime.MAX);

plus系列方法用于相加,minus系列方法用于相减,get系列方法用于获得值,with系列方法用于获得处理后的副本

2.日期的格式化

原来会用到SimpleDateFormat类,但他是线程不安全的。
看新的线程安全的API:

LocalDate.parse("2005-12-03", DateTimeFormatter.ofPattern("yyyy-MM-dd"));

dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

3.对两个日期的判断和运算

判断两个日期:

dateTime.isAfter(other);

dateTime.isBefore(other);

dateTime.equels(other);

计算两个日期之间相差的情况:

LocalDate date = LocalDate.now();

Period period = Period.between(date, date.plusWeeks(2));

System.out.println(period.getYears() + " " + period.getDays());

除了Period之外,还有一个Duration也可以用于计算两个日期的差值。他们的区别是:当处理带时区的时间时,请使用Period,因为会涉及到夏令时问题

4.带时区的日期

语言对时区的支持,主要体现在UTC时间的转换上。这里需要注意一下,时区的名词有UTC和GMT,简单理解他们其实表示一个意思。
比如现在我想知道纽约现在是几点,一种方式是:

ZoneId america = ZoneId.of("America/New_York");

LocalDateTime localtDateAndTime = LocalDateTime.now();

ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america);

System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork);

ZonedDateTime用于处理带时区的日期。
这里的ZoneId一定要写对,否则会抛异常。

还有另一种方式,用时区偏移量也可以实现时区时间转换:

LocalDateTime datetime = LocalDateTime.now();

ZoneOffset offset = ZoneOffset.of("-05:00");

OffsetDateTime date = OffsetDateTime.of(datetime, offset);

System.out.println("Date and Time with timezone offset in Java : " + date);

这种方式对机器友好,第一种方式对人类友好。

5、与旧API的相互操作

Java8中用Instant表示时间轴上的一个点,和原先的Date很像。
下面是Date、Instant和LocalDateTime之间的相互转换:

Date date = new Date();

Instant instant = date.toInstant();

LocalDateTime.ofInstant(instant,ZoneId.systemDefault());

ZoneId zoneId = ZoneId.systemDefault();

LocalDate localDate = LocalDate.now();

ZonedDateTime zdt = localDate.atStartOfDay(zoneId);

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

6、时间调整之TemporalAdjusters

比如我要获取这个月的最后一天,可以这么做:

LocalDate date = LocalDate.of(2019,1, 1);

LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());

System.out.println(lastDay);

这里出现了TemporalAdjusters类,它包含的方法如下:
 

TemporalAdjusters其实是TemporalAdjuster的工具类,而TemporalAdjuster则是一个函数接口,可以执行复杂的时间操作。
比如要获取某天之后的工作日:

public static void main(String[] args) throws UnirestException {

LocalDate localDate = LocalDate.of(2019, 7, 8);

TemporalAdjuster temporalAdjuster = NEXT_WORKING_DAY;

LocalDate result = localDate.with(temporalAdjuster);

}

static TemporalAdjuster NEXT_WORKING_DAY = TemporalAdjusters.ofDateAdjuster(date -> {

DayOfWeek dayOfWeek = date.getDayOfWeek();

int daysToAdd;

if (dayOfWeek == DayOfWeek.FRIDAY)

daysToAdd = 3;

else if (dayOfWeek == DayOfWeek.SATURDAY)

daysToAdd = 2;

else

daysToAdd = 1;

return date.plusDays(daysToAdd);

});

相关知识

使用按内容相等行为创建对象表达式
花生的生长周期多少天?
LeetCode习题整理(中等)I
向日葵花期多少天
python实现元旦倒计时、圣诞树、跨年烟花的绘画马上双旦了给大家带来一些python代码 1.元旦节日倒计时代码的实现
养花多少天浇一次水
建立一个植物毒性分类器:数据准备和清理
绣球花养护技巧——绣球花插花水养多少天?
洋兰切花能养多少天
室内花草多少天浇一次水

网址: Java8 Lambda表达式获取当前时间之前的多少天 https://m.huajiangbk.com/newsview144313.html

所属分类:花卉
上一篇: 花卉认证的形式
下一篇: 秋天种植什么蔬菜容易生长 春天+