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. tcpdump后台抓包并输出给wireshark

    # 先进到/tmp 目录执行,方便Filezila 传输 # 开启抓包 nohup tcpdump -i eth0 -s0 -nnA 'port 22' -w dump22.pcap & [1 ...

  2. 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历

    剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...

  3. [个人总结]pytorch中用checkpoint设置恢复,在恢复后的acc上升

    原因是因为checkpoint设置好的确是保存了相关字段.但是其中设置的train_dataset却已经走过了epoch轮,当你再继续训练时候,train_dataset是从第一个load_data开 ...

  4. C语言中字符串详解

    C语言中字符串详解 字符串时是C语言中非常重要的部分,我们从字符串的性质和字符串的创建.程序中字符串的输入输出和字符串的操作来对字符串进行详细的解析. 什么是字符串? C语言本身没有内置的字符串类型, ...

  5. 通过穷举法快速破解excel或word加密文档最高15位密码

    1.打开文件 2.工具 --- 宏 ---- 录制新宏 --- 输入名字如 :aa 3.停止录制 ( 这样得到一个空宏 ) 4.工具 --- 宏 ---- 宏 , 选 aa, 点编辑按钮 5.删除窗口 ...

  6. 十一. SpringCloud Alibaba

    1. SpringCloud Alibaba简介 1.1 为什么会出现SpringCloud Alibaba Spring Cloud Netflix项目进入到维护模式 什么是维护模式?=> 将 ...

  7. 设计模式系列之原型模式(Prototype Pattern)——对象的克隆

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  8. JS的this指向深入

    this指向深入 this的绑定规则 默认绑定 this默认指向了window 全局环境下this指向了window 函数独立调用,函数内部的this也指向了window <script> ...

  9. 1_JVM与Java体系结构

    目录 JVM与Java体系结构 前言 架构师每天都在思考什么? 为什么要学习JVM Java vs C++ 推荐书籍 Java生态圈 字节码 多语言混合编程 Java发展的重大事件 虚拟机与Java虚 ...

  10. 11、pass,is,位运算的补充

    pass的补充 一般Python的代码是基于:和缩进来实现,Python中规定代码块中必须要有代码才算完整,在没有代码的情况下为了保证语法的完整性可以用pass代替 if 条件: pass else: ...