文档章节

生成日期数据

无知的小孩
 无知的小孩
发布于 2018/01/31 17:16
字数 766
阅读 11
收藏 0

package ;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
 
// 生成日期数据
public class DateData {
    
    private static final SimpleDateFormat sdf_yyyy_MM_dd_HH = new SimpleDateFormat("yyyy-MM-dd HH");
    private static final SimpleDateFormat sdf_yyyy_MM_dd_HH_mm = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    private static final SimpleDateFormat sdf_yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
    private static final SimpleDateFormat sdf_yyyyNianMMYueddRi = new SimpleDateFormat("yyyy年MM月dd日");
    private static final SimpleDateFormat sdf_yyyyMM = new SimpleDateFormat("yyyyMM");
    private static final SimpleDateFormat sdf_yyNianMMYue = new SimpleDateFormat("yy年MM月");
    
    // 获取大于等于1年的日期(如果当前日期大于或等于本年度的第一天则取去年第一天到今天)
    public static List<Map<String,Object>> getDaysOneTree() {
        
        List<Map<String,Object>> days = Lists.newLinkedList();
        List<Map<String,Object>> months = Lists.newLinkedList();
        int dayCount = 0;
        long maxDay = getDays();
        boolean isNotOneDay = true; //是否不该终止的天
        while(isNotOneDay){
            
            boolean checked = false;
            if(dayCount< 2){
                checked = true;
            }
            
            Calendar calendar = Calendar.getInstance();  
            Date temp_date = getDateBefore(calendar.getTime(),dayCount);
            calendar.setTime(temp_date);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            Map<String,Object> node = Maps.newHashMap();
            node.put("checked", checked);
            node.put("id", sdf_yyyyMMdd.format(temp_date));
            node.put("text", sdf_yyyyNianMMYueddRi.format(temp_date));
            months.add(node);
            if(day == 1){
                String state = "open";
                if(dayCount >2 ){
                    state = "closed";
                }
                Map<String,Object> node_yue = Maps.newHashMap();
                node_yue.put("checked", false);
                node_yue.put("state", state);
                node_yue.put("id", sdf_yyyyMM.format(temp_date));
                node_yue.put("text", sdf_yyNianMMYue.format(temp_date));
                node_yue.put("children", months);
                months = Lists.newLinkedList();
                days.add(node_yue);
            }
            
            if(dayCount > maxDay && month == 0 && day == 1){
                isNotOneDay = false; //是否是每年第一天
            }
            dayCount += 1;
        }
        return days;
    }
    
    // 获取今天的间隔XX分钟时间
    public static List<Map<String,Object>> getMinutesDayTree(){
        return getMinutesDayTree(15);
    }
    
    // 获取今天的间隔XX分钟时间
    public static List<Map<String,Object>> getMinutesDayTree(Integer interval){
        List<Map<String,Object>> days = Lists.newLinkedList();
        List<Map<String,Object>> day = Lists.newLinkedList();
        if(interval == null || interval <= 0){
            interval = 15;
        }
        Calendar calendar = Calendar.getInstance();  
        int minute = calendar.get(Calendar.MINUTE);
        if(minute % interval != 0){
            minute = (minute / interval+1)*interval;
        }
        calendar.set(Calendar.MINUTE,minute);
        int minuteCount = 0;
        long _maxDay = getDays();
        int maxMinuteCount = (int) (_maxDay*24*60/interval);
        boolean isNotMinutes = true;
        while(isNotMinutes){
            if(minuteCount >= maxMinuteCount){
                isNotMinutes = false;
            }
            boolean checked = false;
            if(minuteCount < 2){
                checked = true;
            }
            Date temp_date = getMinuteBefore(calendar.getTime(),(minuteCount)*interval);
            String format_HHmm = sdf_yyyy_MM_dd_HH_mm.format(temp_date);
            Map<String,Object> node = Maps.newHashMap();
            node.put("checked", checked);
            node.put("id", format_HHmm);
            node.put("text", format_HHmm);
            day.add(node); 
            if(format_HHmm.endsWith("00:00")){
                Map<String,Object> node_day = Maps.newHashMap();
                node_day.put("checked", false);
                node_day.put("id", sdf_yyyyMMdd.format(temp_date));
                node_day.put("text", sdf_yyyyNianMMYueddRi.format(temp_date));
                node_day.put("children",day);
                days.add(node_day);
                day = Lists.newLinkedList();
            }
            minuteCount +=1;
        }
        return days;
    }
    
    // 获取今天的间隔XX小时时间
    public static List<Map<String,Object>> getHoursDayTree(){
        return getHoursDayTree(1);
    }
    
    // 获取今天的间隔XX小时时间
    public static List<Map<String,Object>> getHoursDayTree(Integer interval){
        List<Map<String,Object>> days = Lists.newLinkedList();
        List<Map<String,Object>> day = Lists.newLinkedList();
        if(interval == null || interval <= 0){
            interval = 1;
        }
        Calendar calendar = Calendar.getInstance();  
        int hourCount = 0;
        long _maxDay = getDays();
        int maxHourCount = (int) (_maxDay*24*60/interval);
        boolean isNotHours = true;
        while(isNotHours){
            if(hourCount >= maxHourCount){
                isNotHours = false;
            }
            boolean checked = false;
            if(hourCount < 2){
                checked = true;
            }
            Date temp_date = getHourBefore(calendar.getTime(),(hourCount)*interval);
            String fmt_HH = sdf_yyyy_MM_dd_HH.format(temp_date);
            Map<String,Object> node = Maps.newHashMap();
            node.put("checked", checked);
            node.put("id", fmt_HH);
            node.put("text", sdf_yyyy_MM_dd_HH.format(temp_date));
            day.add(node);
            //如果是每天的第一个小时
            if(fmt_HH.endsWith("00")){
                Map<String,Object> node_day = Maps.newHashMap();
                node_day.put("checked", false);
                node_day.put("id", sdf_yyyyMMdd.format(temp_date));
                node_day.put("text", sdf_yyyyNianMMYueddRi.format(temp_date));
                node_day.put("children",day);
                days.add(node_day);
                day = Lists.newLinkedList();
            }
            hourCount +=1;
        }
        return days;
    }
    
    private static long getDays(){
        long end = new Date().getTime();
        long start = getDate("20170101").getTime();
        return (end - start)/(1000*60*60*24);
    }
    
    private static Date getDate(String strDate){
        String fmt = "yyyyMMdd";
        if(strDate.indexOf("日") >-1){
            strDate = strDate.replaceAll("年", "-");
            strDate = strDate.replaceAll("月", "-");
            strDate = strDate.replaceAll("日", "");
        }
        if(strDate.indexOf("-") >-1){
            fmt = "yyyy-MM-dd";
            strDate = strDate.substring(0,8);
        }
        Date date = new Date();
        SimpleDateFormat sdf1 = new SimpleDateFormat(fmt);
        try {
            date = sdf1.parse(strDate);
        }catch(ParseException e){
            e.printStackTrace();
        }
        return date;
    }
    
    //得到几天前的时间 
    private static Date getDateBefore(Date d, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
        return now.getTime();
    }
    
    //得到几小时前的时间 
    private static Date getHourBefore(Date d, int hour) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.HOUR, now.get(Calendar.HOUR) - hour);
        return now.getTime();
    }
    
    //得到几分钟前的时间 
    private static Date getMinuteBefore(Date d, int minute) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) - minute);
        return now.getTime();
    }
    
}
 

© 著作权归作者所有

共有 人打赏支持
无知的小孩
粉丝 1
博文 70
码字总数 19034
作品 0
贵阳
后端工程师
私信 提问
开源一个ReactNative日历控件

项目地址: react-native-slideable-calendar-strip 演示地址: Calendar-Strip.mp4 为何要再实现一个日历控件 已经有了react-native-calendar-strip为何还需要我这个日历控件? 一般的甲方都会...

周辉爱学习
2018/05/22
0
0
基于Hadoop生态圈的数据仓库实践 —— 进阶技术(三)

三、维度子集 有些需求不需要最细节的数据。例如更想要某个月而不是某天的记录。再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等。这些特定维度包含在从细节维度选择的行中...

wzy0623
2016/07/18
0
0
mysql常用数据类型的使用方式--日期时间型

日期和时间数据类型 日期,时间类型的数据生成 日期,时间数据类型查询 日期,时间数据类型的修改 日期,时间数据类型的删除 日期,时间数据类型的转换

noteman
2015/12/04
43
0
MaxCompute数据仓库在更新插入、直接加载、全量历史表三大算法中的数据转换实践

2018“MaxCompute开发者交流”钉钉群直播分享,由阿里云数据技术专家彬甫带来以“MaxCompute数据仓库数据转换实践”为题的演讲。本文首先介绍了MaxCompute的数据架构和流程,其次介绍了ETL算...

云迹九州
2018/07/27
0
0
写一个构建复杂数据的日历组件 Kalendar

需求:我们经常会在一些旅游、订票、酒店的页面中看到一些日历,这些日历有公历、农历、节假日、非节假日(调休)的标注,同时还有产品业务上的信息,比如 票价、余票等等。那现在开始造造轮...

LoadChange
2018/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android Messenger进程间客户端向服务端传递数据

Messenger:客户端向服务端传递数据 1.Service: public class MessengerService extends Service { private Messenger messenger = new Messenger(new Handler() { public void handleMess......

Coding缘
2分钟前
0
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

zhaowei121
20分钟前
0
0
oracle XTTS介绍

一、什么是XTTS 首先什么是XTTS。XTTS其实是从TTS来的,TTS其实也是传输数据的一种手段,传输数据的时候可能用过EXP的方式,再往后可能用数据泵导入导出一些数据,或者去做备份然后再恢复。其...

突突突酱
21分钟前
0
0
[缺陷分析]半同步下多从库复制异常

引 言 本文是由爱可生研发团队出品的「图解MySQL」系列文章,不定期更新,但篇篇精品。 爱可生开源社区持续运营维护的小目标: 每周至少推送一篇高质量技术文章 每月研发团队发布开源组件新版...

爱可生
21分钟前
0
0
二维数组序号重置

public static function unique_arr($array2D,$stkeep=false,$ndformat=true){ // 判断是否保留一级数组键 (一级数组键可以为非数字) if($stkeep) $stArr = array_keys($array2D); // 判断是......

dragon_tech
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部