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. 《C++ Primer》笔记 第8章 IO库

    iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...

  2. Tomcat8弱口令+后台getshell

    漏洞原因 用户权限在conf/tomcat-users.xml文件中配置: <?xml version="1.0" encoding="UTF-8"?&g ...

  3. 为什么要从 Linux 迁移到 BSD 5

    为什么要从 Linux 迁移到 BSD 5 干净的分离 在 FreeBSD 的设计方式下,不同的组件组合在一起的,处理配置和调优,以及多年来开发和改进的所有工具,使得使用 FreeBSD 是一件很特别 ...

  4. STL之string容器

    string string封装了char*,管理这个字符串,是一个char*型的容器. string的相关操作 头文件 #include<string> string构造函数 string ...

  5. MySql历史与架构

    MySQL 逻辑架构

  6. WorkSkill整理之 java用Scanner 类输入数组并打印

    输入不确定长度的数组 import java.util.*; public static void main(String[] args){ System.out.println("请输入一 ...

  7. POJ_2253 Frogger 【最短路变形】

    一.题目 Frogger 二.分析 题意关键点就是那个青蛙距离.就是所有1到2的点的路径中,每条路径都可以确定一个最大值,这个最大值就是青蛙要跳的青蛙距离,然后要求这个青蛙距离最小值. 其实就是最短路 ...

  8. Python基础之告警定义与告警抑制

    技术背景 在前面一篇博客中我们介绍了在python中自定义异常以及异常的捕获.这里我们要介绍另外一种形式的用户提醒:告警.我们这里就不给出一些过于官方或者技术的定义了,在实际项目中的使用场景主要有这么 ...

  9. Etcd常用运维命令

    目录 常用命令 常见操作 如何缩容? 如何扩容? 数据目录丢失或被误删除,节点启动失败或者加入集群报错? 操作步骤 操作步骤不正确的各种常见错误日志 常用命令 #查看集群member情况 etcdct ...

  10. 第20 章 : GPU 管理和 Device Plugin 工作机制

    GPU 管理和 Device Plugin 工作机制 本文将主要分享以下几个方面的内容: 需求来源 GPU 的容器化 Kubernetes 的 GPU 管理 工作原理 课后思考与实践 需求来源 201 ...