当前位置: 首页 > news >正文

java 切割日期时间段,分割时间段

为什么80%的码农都做不了架构师?>>>   hot3.png

package com.trc.funds.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author dy
 * @since 2016-09-18  & JDK 1.8.0_91
 */
public class DateCalculate {
    static Logger logger = LoggerFactory.getLogger(DateCalculate.class);

    /**
     * 切割时间段
     * 支持每月/每天/每小时/每分钟交易金额(可分应用平台统计)
     * @param dateType 日期类型 M(每月)/D(每天)/H(每小时)/N(每分钟)
     * M:日期段应为当年月份以内 且 日期必须是01 时分秒必须是 00:00:00  例如:2016-06-01 00:00:00 2016-10-01 00:00:00
     * D: 日期段应为一月内 且 日期应当是01或31  时分秒必须是 00:00:00   例如:2016-10-01 00:00:00 2016-10-31 00:00:00
     * H:日期段应为一天内  且 时分秒必须是 00:00:00   例如:2016-10-01 00:00:00 2016-10-02 00:00:00
     * N:日期段应为一小时内  日期应相同 且 分秒必须是 xx:00:00   例如:2016-10-02 22:00:00 2016-10-02 23:00:00

     * @param dateType 交易类型 M/D/H/T -->每月/每天/每小时/每分钟
     * @param start    yyyy-MM-dd HH:mm:ss
     * @param end      yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static List<Date> cutDate(String dateType, String start, String end) {
        try {
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date dBegin = sdf.parse(start);
            Date dEnd = sdf.parse(end);
            return findDates(dateType, dBegin, dEnd);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public static List<Date> findDates(String dateType, Date dBegin, Date dEnd) throws Exception {
        List<Date> listDate = new ArrayList<>();
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(dBegin);
        listDate.add(calBegin.getTime());
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(dEnd);
        while (calEnd.after(calBegin)) {
            switch (dateType) {
                case "M":
                    calBegin.add(Calendar.MONTH, 1);
                    break;
                case "D":
                    calBegin.add(Calendar.DAY_OF_YEAR, 1);
                    break;
                case "H":
                    calBegin.add(Calendar.HOUR, 1);
                    break;
                case "T":
                    calBegin.add(Calendar.MINUTE, 1);
                    break;
                default:
                    return null;
            }
            if (calEnd.after(calBegin))
                listDate.add(calBegin.getTime());
            else {
                listDate.add(calEnd.getTime());
                break;
            }
        }
        return listDate;
    }


    public static void main(String[] args) throws Exception {
        String start = "2016-10-02 22:00:00";
        String end = "2016-10-02 23:00:00";
        List<Date> list = cutDate("T", start, end);
        for (int i = 0; i < list.size(); i++) {
            System.out.println("-------------------");
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(list.get(i)));
//            System.out.println(list.get(i).getMonth()+1 +"月");
//            System.out.println(list.get(i).getDate()+"日");
//            System.out.println(list.get(i).getHours());
            System.out.println(list.get(i).getMinutes());
            System.out.println(list.get(i));
            if (i < list.size() - 2)
                System.out.println(list.get(i + 1));
            else {
                System.out.println(list.get(i + 1));
                i++;
            }
        }

//        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(findEndDate("M", start, end)));
    }
}

转载于:https://my.oschina.net/dyyweb/blog/748158

相关文章:

  • shell、python脚本终端颜色输出
  • 转换图片大小
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Linux系统查看系统是32位还是64位方法总结【转】
  • 扩展Label控件(1) - 实现回发(Postback)功能
  • 使用 Github Pages 发布你的项目文档
  • 解决客户一例:使用域超级管理员打开Exchange 2010发现没有权限
  • AngualrJs 微信支付url未注册大坑解决方法
  • mac终端下svn常用命令
  • http协议进阶(四)报文首部
  • QName
  • 浅议tomcat与classloader
  • Java中的匿名内部类
  • 移动端点击作弊与激活作弊的现象与预警
  • IT人员的职业生涯规划
  • 分享一款快速APP功能测试工具
  • 《Java编程思想》读书笔记-对象导论
  • Angular数据绑定机制
  • canvas 绘制双线技巧
  • docker python 配置
  • express如何解决request entity too large问题
  • JavaWeb(学习笔记二)
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Median of Two Sorted Arrays
  • PHP那些事儿
  • Redis的resp协议
  • spring boot下thymeleaf全局静态变量配置
  • vuex 笔记整理
  • Vue学习第二天
  • 创建一个Struts2项目maven 方式
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 算法-图和图算法
  • 详解移动APP与web APP的区别
  • 走向全栈之MongoDB的使用
  • Semaphore
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​香农与信息论三大定律
  • ###C语言程序设计-----C语言学习(6)#
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (3)nginx 配置(nginx.conf)
  • (30)数组元素和与数字和的绝对差
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ../depcomp: line 571: exec: g++: not found
  • ./和../以及/和~之间的区别
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net core 6.0 升8.0
  • .Net 路由处理厉害了
  • .net6 webapi log4net完整配置使用流程