文档章节

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

满风
 满风
发布于 2016/09/18 17:26
字数 493
阅读 457
收藏 3
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)));
    }
}

© 著作权归作者所有

满风

满风

粉丝 91
博文 171
码字总数 174418
作品 0
杭州
技术主管
私信 提问
日期和时间API - 读《Java 8实战》

日期与时间 LocalDate 创建一个LocalDate对象并读取其值 LocalTime 创建LocalTime并读取值 LocalDateTime 直接创建LocalDateTime对象或通过合并日期和时间的方式创建 Instant 机器的日期和时...

yysue
2018/08/14
0
0
Java 8新的时间日期库的20个使用示例

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。Java对日期,日历及时间的...

清尘V
2015/03/17
0
0
有关solr日期查询组合问题

java操作solr进行日期组合,如何实现某个日期在一个时间段或这个日期为空的组合查询

awhp
2017/06/23
92
2
请问大家网站中model的是怎么设计的?

比如用户表,其中有个登陆日期字段 jsp页面中有功能:查询从某个时间到某个时间段内,哪些用户登陆过 我们的做法:如果是struts1的话, 需要新建两个java文件,第一个和用户表一一对应 (model层), ...

零点三六
2013/02/26
130
3
java时间切割的问题

java的 给两个时间点startDateTime,endDateTime 还有一个数字n 返回这个时间段内分成n段各个时间点的时间,包括头尾,yyyy-mm-dd hh:mm:ss这样的格式...

麻美学姐
2015/06/15
288
3

没有更多内容

加载失败,请刷新页面

加载更多

idea运行spring boot(推荐)

下载idea 注册激活:http://idea.lanyus.com/ 照着网上的步骤创建spring boot,这里记录存在的坑 首先gradle需要在本地配置环境变量,配制成本地的,联网下载的话要很久很久 第一次不要使用g...

安卓工程师王恒
31分钟前
2
0
java final学习笔记

代码如下:class Circle{ double r; double pi=3.14; public Circle(double r) { this.r=r; } public void getArea() { System.out.......

hellation_
50分钟前
1
0
JavaConfig版

中心思想:去xml配置文件。 在Spirng Boot和Spring Cloud中,大量使用了注解与JavaConfig。 xml文件 对应的Java类 spring.xml SpringConfig.java spring-mvc.xml SpringMvcConfig.java web.x...

流小文
今天
6
0
Go 定时器内部实现原理剖析

前言 前面我们介绍了一次性定时器Timer和周期性定时器Ticker,这两种定时器内部实现机制相同。创建定时器的协程并不负责计时,而是把任务交给系统协程,系统协程统一处理所有的定时器。 本节...

恋恋美食
今天
6
0
分布式协调神器 ZooKeeper 之整体概述

ZooKeeper 最早起源于雅虎研究院的一个研究小组。当时,雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就...

别打我会飞
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部