package com.gabriel.stage.utils;

import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import org.apache.commons.lang3.time.DateUtils; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; /**
* @author: Gabriel
* @date: 2019/12/3 22:49
* @description 日期时间转换工具类
*/
public class CommonDateUtil { public static final String FORMATTER_YYYY_M_MDD_H_HMMSS = "yyyy-MM-dd HH:mm:ss"; public static final String FORMATTER_YYYY_M_MDD_H_HMM = "yyyy-MM-dd HH:mm"; public static final String FORMATTER_YYYY_M_MDD = "yyyy-MM-dd"; /**
* 根据起止时间构建一个时间列表 Date->List<Date>
* @param begin 开始时间 {@link java.util.Date}
* @param end 结束时间 {@link java.util.Date}
* @return
*/
public static List<Date> collectDateByDates(Date begin,Date end){
return Stream.iterate(begin,date -> DateUtils.addDays(date,1))
.limit(DateUtil.between(begin,end,DateUnit.DAY))
.collect(Collectors.toList());
} /**
* 根据起止时间构建一个时间字符串列表 Date->List<String>
* @param begin 开始时间 {@link java.util.Date}
* @param end 结束时间 {@link java.util.Date}
* @return
*/
public static List<String> collectStrDateByDates(Date begin,Date end){
return Stream.iterate(begin,date -> DateUtils.addDays(date,1))
.limit(DateUtil.between(begin,end,DateUnit.DAY))
.map(date -> DateUtil.format(date,CommonDateUtil.FORMATTER_YYYY_M_MDD))
.collect(Collectors.toList());
} /**
* 根据起止时间构建一个时间字符串列表 LocalDate ->List<Date>
* @param begin 开始时间 {@link java.util.Date}
* @param end 结束时间 {@link java.util.Date}
* @return
*/
public static List<Date> collectDateByLocalDates(LocalDate begin, LocalDate end){
return Stream.iterate(begin, localDate -> localDate.plusDays(1))
.limit(ChronoUnit.DAYS.between(begin, end) + 1)
.map(x->Date.from(x.atStartOfDay(ZoneId.systemDefault()).toInstant()))
.collect(Collectors.toList());
} /**
* 根据起止时间构建一个时间字符串列表 LocalDate ->List<String>
* @param begin 开始时间 {@link java.time.LocalDate}
* @param end 结束时间 {@link java.time.LocalDate}
* @return
*/
public static List<String> collectStrDateByLocalDates(LocalDate begin, LocalDate end){
return Stream.iterate(begin, localDate -> localDate.plusDays(1))
.limit(ChronoUnit.DAYS.between(begin, end) + 1)
.map(LocalDate::toString)
.collect(Collectors.toList());
}
}

【工具类】Stream流构建指定长度的时间集合的更多相关文章

  1. [java工具类01]__构建格式化输出日期和时间的工具类

    在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同 ...

  2. 005-guava 集合-集合工具类-java.util.Collections中未包含的集合工具[Maps,Lists,Sets],Iterables、Multisets、Multimaps、Tables

    一.概述 工具类与特定集合接口的对应关系归纳如下: 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collections2:不要和java.util.Col ...

  3. 工具类Arrays.asList()方法把数组转换成集合

    工具类Arrays.asList()方法把数组转换成集合 不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException() 问 ...

  4. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  5. 利用commons-io.jar包中FileUtils和IOUtils工具类操作流及文件

    1.String IOUtils.toString(InputStream input),传入输入流对象,返回字符串,有多重重载,可按需要传参 用例: @Test public void showIn ...

  6. 工具类 | window批处理杀死指定端口进程

    window批处理杀死指定端口进程,注意保存时使用ansi格式,运行输入端口即可 @echo off setlocal enabledelayedexpansion set /p port=请输入端口 ...

  7. Java工具类_随机生成任意长度的字符串【密码、验证码】

    import java.util.Random; public class PasswordCreate { /** * 获得密码 * @param len 密码长度 * @return */ pub ...

  8. python 工具 二进制文件处理之——去掉指定长度数据包头

    包头48bit 数据98464 ...如此循环: piece_size = 48 piece_size1 = 98464 with open("C:\\Users\\Administrato ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)

随机推荐

  1. CentOS Install NMP

    目录 Installation steps of the Nginx install run 默认安装路径 指定安装目录 Installation steps of the MySQL 下载源码包 解 ...

  2. IDEA SVN 使用

    转: IDEA SVN 使用 一.上传项目到 SVN VCS -> Import into Version Control -> Share Project(Subversion) 点击 ...

  3. 一文帮你搞懂 Android 文件描述符

    介绍文件描述符的概念以及工作原理,并通过源码了解 Android 中常见的 FD 泄漏. 一.什么是文件描述符? 文件描述符是在 Linux 文件系统的被使用,由于Android基 于Linux 系统 ...

  4. Linux速通03 目录文件的浏览、管理和维护

    Linux文件系统的层次结构 # 树状结构:在Linux或Unix操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构. # 目录的定义:目录相当于Windows中的文件夹,目录中存 ...

  5. Java高并发编程基础三大利器之CountDownLatch

    引言 上一篇文章我们介绍了AQS的信号量Semaphore<Java高并发编程基础三大利器之Semaphore>,接下来应该轮到CountDownLatch了. 什么是CountDownL ...

  6. WPF 基础 - DataTemplate 和 ControlTemplate 的关系和应用

    1. 关系 凡是 Template,最后都得作用到 控件 上,这个控件就是 Template 的目标控件(也称模板化控件): DataTemplate 一般是落实在一个 ContentPresente ...

  7. web之面试常问问题:如何实现水平垂直居中?

    前提准备,在HTML页面中定义一个div,div中内容自定义. <div class="box sc">致我们呼啸而过的青春</div> 样式: div.b ...

  8. [ONTAK2010] Peaks 加强版

    [ONTAK2010] Peaks 加强版 题目大意:原题变为强制在线查询 Solution 读入山高,排序后依然建立树链,初始化并查集,初始化重构树新节点标号为\(n+1\) 读入边,按照边权从小到 ...

  9. jQuery学习笔记(1) 初识jQuery

    目录 目录 引用 注意 HelloWorldHelloWorld! jQueryjQuery对象和DOMDOM对象的相互转换 冲突的解决 引用 本地文件引用: <script src=" ...

  10. 项目实战:Qt+C#轨道交通行业高性能高流畅度模拟火车移动图像控件

    需求   高清线阵相机扫描火车并自动切割单节车厢完成图像合成.通过视频图像处理组件流畅模拟火车行驶整个过程的视频图像:  1.模拟火车通过时的滚动图像,图像主要以两侧和顶部图像的预览为主;  2.模拟 ...