精华内容
下载资源
问答
  • 项目中有这么一个业务场景,数据库中某张表有个起始时间,和一个累加时间,比如2020-01-07,往后每次加3天为一个周期,到2020-01-10是周期1,到2020-01-13是周期2,以此类推。通过Java可以直接计算出周期,然后进行...

    Java 某个起始时间,固定的一个天数相加,计算周期每次加过后的周期

    前言

    项目中有这么一个业务场景,数据库中某张表有个起始时间,和一个累加时间,比如2020-01-07,往后每次加3天为一个周期,到2020-01-10是周期1,到2020-01-13是周期2,以此类推。通过Java可以直接计算出周期,然后进行数据库操作。

    代码

        /**
         * 获取某个日期和当前时间差几天
         */
        public static Long getDayPassed(Date beginDate) {
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Long days = null;
            try {
                Date currentTime = dateFormat.parse(dateFormat.format(new Date()));//现在系统当前时间
                long diff = currentTime.getTime() - beginDate.getTime();
                days = diff / (1000 * 60 * 60 * 24);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return days;
        }
    

    传入数据库中数据的起始时间,计算出距离当前时间相差多少天

            int differNum = getDayPassed(rankPeriod.getBeginDate()).intValue();
            // 拿到数据库中配置的时间间隔
            int cycle = rankPeriod.getCircleDay();
            int period = Math.floorDiv(differNum, cycle);
            if (differNum % cycle != 0) {
                period = period + 2;
            } else {
                period = period + 1;
            }
    

    上面代码的意思就在于,起始时间和当前时间相差多少天,比如2020-01-07是当前时间,起始时间是2020-01-02,相差了5天,数据库配置的间隔天数是2天,通过Math.floorDiv方法,两个天数相除得到一个整数2,
    再取两个数的余数,不为0整除的话加2,最后得出的2020-01-022020-01-07有3个周期

    展开全文
  • JAVA 时分秒累加

    千次阅读 2018-01-05 14:05:17
    有个需求是,累加通话时长,把上次通话时长加上本次通话时长,依次累加。 二、实现 @Test public void TestA() throws ParseException { SimpleDateFormat myFormatter = new SimpleDateFormat("HH:mm:ss"); ...

    一、简介

    有个需求是,累加通话时长,把上次通话时长加上本次通话时长,依次累加。

    二、实现

        @Test
        public void TestA() throws ParseException {
    
                SimpleDateFormat myFormatter = new SimpleDateFormat("HH:mm:ss");
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
                //上一次通话时长
                HealthConsultation healthConsultation = new HealthConsultation();
                healthConsultation.setConsultinghours("00:00:08");
    
    
                //呼叫时长 3
                HealthCallStateRecord healthCallStateRecorda = new HealthCallStateRecord();
                healthCallStateRecorda.setCreatedate(format.parse("2017-12-19 17:43:42"));
    
                //本次通话时长 4
                HealthCallStateRecord healthCallStateRecordb = new HealthCallStateRecord();
                healthCallStateRecordb.setCreatedate(format.parse("2017-12-19 18:51:50"));
    
                //4-3的时间 获得两个时间的毫秒时间差异
                long diff = healthCallStateRecordb.getCreatedate().getTime() - healthCallStateRecorda.getCreatedate().getTime();//这样得到的差值是微秒级别
                long nd = 1000 * 24 * 60 * 60;
                long nh = 1000 * 60 * 60;
                long nm = 1000 * 60;
                long ns = 1000;
                // 计算差多少天
                long day = diff / nd;
                // 计算差多少小时
                long hour = diff % nd / nh;
                // 计算差多少分钟
                long min = diff % nd % nh / nm;
                // 计算差多少秒//输出结果
                long sec = diff % nd % nh % nm / ns;
    
                //判断上次是否有通话,如果有通话时长,就都累加
                if(healthConsultation.getConsultinghours() != null){
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(myFormatter.parse(healthConsultation.getConsultinghours()));
                    int shi = (int)cal.get(Calendar.HOUR_OF_DAY)+(int)hour;
                    int fendo = (int)cal.get(Calendar.MINUTE)+(int)min;
                    int miao = (int)cal.get(Calendar.SECOND)+(int)sec;
    
                    //秒大于60设为00,然后判断分是否大于60分钟,如果是则分钟清0,小时加1,否则,分钟加1。
                    if(miao>60){
                        miao=00;
                        if(fendo>60){
                            fendo = 00;
                            shi = shi+1;
                        }else {
                            fendo = fendo + 1;
                        }
                    }
                    Date dates = myFormatter.parse(shi + ":" + fendo + ":" + miao);
                    System.out.println("不为空当前时间 : " + myFormatter.format(dates));
                }else {
                    //如果上次无通话,就把本次时长,设为通话时长。
                    Date dates = myFormatter.parse(hour + ":" + min + ":" + sec);
                    System.out.println("为空当前时间 : " + myFormatter.format(dates));
                }
    
    
        }
    输出结果为:

    不为空当前时间 : 01:08:16
    通话时长为1个多小时。


    展开全文
  • 在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
  • 在2月7日的基础上加7天,这7天不包含节假日和周六日,所以最后的时间应该是2月22日。 分享一下代码: 由于我们把每一年的节假日以及周六日配置到数据库中了,所以下面有个是判断数据库中存不存在当前的日期。 如果...

    最近工作中遇到个需求,大致的实现功能是,在某一天的基础上加上规定的天数,所加的这些天中不包括周六日以及节假日。
    比如:
    在这里插入图片描述
    在2月7日的基础上加7天,这7天不包含节假日和周六日,所以最后的时间应该是2月22日。

    分享一下代码:

    由于我们把每一年的节假日以及周六日配置到数据库中了,所以下面有个是判断数据库中存不存在当前的日期。
    如果不用数据库,可以把假日放到文本中,或者其他的方法。当然这些不重要,只是数据的处理。

    如下:将21年的周六日以及节假日存到数据库中了。(当然这样数据准备会麻烦,后续会优化)
    在这里插入图片描述

    代码如下:

    /**
    	 * 
    	 * 
    	 * @param  tjsj:基础时间   days:需要加的时间
    	 * 
    	 * */
    public Date getQxwcDate(Date tjsj, int days) throws Exception {
    		
    		Calendar calendar = Calendar.getInstance();
    		calendar.setTime(tjsj);
    		
    		//计数器
    		int i = 0;
    		while(i<days) {//当i等于days时,停止循环
    			
    			//先将基础时间加一天,只需要判断后一天是否是节假日或者周六日即可,不是计数器加一,这样就会与时间一致。
    			calendar.add(Calendar.DATE, 1);
    			tjsj = calendar.getTime();//获取加一天之后的时间
    			
    			
    			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    			String ymd = simpleDateFormat.format(tjsj);
    			//判断提交日期是否是节假日或周末
    			boolean isContains = ippcXtglHolidayGzrDao.checkIsContains(ymd);
    			
    			if(!isContains) {//不是节假日或周六日,计数器加一
    				i++;
    			}
    			
    		}
    		
    		return tjsj;
    	}
    

    测试方法

    public void testHoli() throws Exception {
    		String date = "2021-02-07 14:03:25";
    		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		Date parse = simpleDateFormat.parse(date);
    		
    		System.out.println("基础时间:  "+parse);
    		Date qxwcDate = ippcXtglHolidayGzrService.getQxwcDate(parse, 7);
    		System.out.println("最后时间:  "+simpleDateFormat.format(qxwcDate));
    	}
    

    结果:
    在这里插入图片描述

    展开全文
  • java处理日期时间 相加减

    千次阅读 2016-12-14 09:30:37
    JAVA处理日期时间常用方法:  1.java.util.Calendar  Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得...
    JAVA处理日期时间常用方法: 

    1.java.util.Calendar 
    Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。 

    例: 
    Java代码   收藏代码
    1. Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。   
    2. cal.add(Calendar.DAY_OF_MONTH, -1);//取当前日期的前一天.   
    3.   
    4. cal.add(Calendar.DAY_OF_MONTH, +1);//取当前日期的后一天.   
    5.   
    6. //通过格式化输出日期   
    7. java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");   
    8.   
    9. System.out.println("Today is:"+format.format(Calendar.getInstance().getTime()));   
    10.   
    11. System.out.println("yesterday is:"+format.format(cal.getTime()));   


    得到2007-12-25日期: 
    Java代码   收藏代码
    1. Calendar calendar = new GregorianCalendar(20071125,0,0,0);   
    2. Date date = calendar.getTime();   
    3. System.out.println("2007 Christmas is:"+format.format(date));   

    java月份是从0-11,月份设置时要减1. 

    GregorianCalendar构造方法参数依次为:年,月-1,日,时,分,秒. 

    取日期的部分: 
    Java代码   收藏代码
    1. int year =calendar.get(Calendar.YEAR);   
    2.   
    3. int month=calendar.get(Calendar.MONTH)+1;   
    4.   
    5. int day =calendar.get(Calendar.DAY_OF_MONTH);   
    6.   
    7. int hour =calendar.get(Calendar.HOUR_OF_DAY);   
    8.   
    9. int minute =calendar.get(Calendar.MINUTE);   
    10.   
    11. int seconds =calendar.get(Calendar.SECOND);   


    取月份要加1. 

    判断当前月份的最大天数: 
    Java代码   收藏代码
    1. Calendar cal = Calendar.getInstance();   
    2. int day=cal.getActualMaximum(Calendar.DAY_OF_MONTH);   
    3. System.out.println(day);   


    2.java.util.Date 
    Java代码   收藏代码
    1. java.util.Date today=new java.util.Date();   
    2. System.out.println("Today is "+formats.format(today));   


    取当月的第一天: 
    Java代码   收藏代码
    1. java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-01");   
    2. java.util.Date firstDay=new java.util.Date();   
    3. System.out.println("the month first day is "+formats.format(firstDay));   

    取当月的最后一天: 
    Java代码   收藏代码
    1.    
    2. Calendar cal = Calendar.getInstance();   
    3. int maxDay=cals.getActualMaximum(Calendar.DAY_OF_MONTH);   
    4. java.text.Format formatter3=new java.text.SimpleDateFormat("yyyy-MM-"+maxDay);   
    5. System.out.println(formatter3.format(cal.getTime()));   


    求两个日期之间相隔的天数: 
    Java代码   收藏代码
    1. java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");   
    2. java.util.Date beginDate= format.parse("2007-12-24");   
    3. java.util.Date endDate= format.parse("2007-12-25");   
    4. long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);   
    5. System.out.println("相隔的天数="+day);   

    一年前的日期: 
    Java代码   收藏代码
    1. java.text.Format formatter=new java.text.SimpleDateFormat("yyyy-MM-dd");   
    2. java.util.Date todayDate=new java.util.Date();   
    3. long beforeTime=(todayDate.getTime()/1000)-60*60*24*365;   
    4. todayDate.setTime(beforeTime*1000);   
    5. String beforeDate=formatter.format(todayDate);   
    6. System.out.println(beforeDate);   

    一年后的日期: 
    Java代码   收藏代码
    1. java.text.Format formatter=new java.text.SimpleDateFormat("yyyy-MM-dd");   
    2. java.util.Date todayDate=new java.util.Date();   
    3. long afterTime=(todayDate.getTime()/1000)+60*60*24*365;   
    4. todayDate.setTime(afterTime*1000);   
    5. String afterDate=formatter.format(todayDate);   
    6. System.out.println(afterDate);   

    求10小时后的时间 
    Java代码   收藏代码
    1. java.util.Calendar Cal=java.util.Calendar.getInstance();   
    2. Cal.setTime(dateOper);   
    3. Cal.add(java.util.Calendar.HOUR_OF_DAY,10);   
    4. System.out.println("date:"+forma.format(Cal.getTime()));   

    求10小时前的时间 
    Java代码   收藏代码
    1. java.util.Calendar Cal=java.util.Calendar.getInstance();   
    2. Cal.setTime(dateOper);   
    3. Cal.add(java.util.Calendar.HOUR_OF_DAY,-10);   
    4. System.out.println("date:"+forma.format(Cal.getTime()));   

    3.java.sql.Date 
    继承自java.util.Date,是操作数据库用的日期类型 
    Java代码   收藏代码
    1. java.sql.Date sqlDate = new java.sql.Date(java.sql.Date.valueOf("2007-12-25").getTime());   

    日期比较:简单的比较可以以字符串的形式直接比较,也可使用 
    java.sql.Date.valueOf("2007-03-08").compareTo(java.sql.Date.valueOf("2007-03-18"))方式来比较日期的大小.也可使用java.util.Date.after(java.util.Date)来比较. 

    相差时间: 
    long difference=c2.getTimeInMillis()-c1.getTimeInMillis(); 
    相差天数:long day=difference/(3600*24*1000) 
    相差小时:long hour=difference/(3600*1000) 
    相差分钟:long minute=difference/(60*1000) 
    相差秒: long second=difference/1000 

    补充: 
    Java代码   收藏代码
    1. DateFormat df=new SimpleDateFormat("yyyy-MM-dd EE hh:mm:ss");   
    2. System.out.println(df.format(new Date()));   
    3. Date date = new Date();   
    4. DateFormat shortDate=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);   
    5. DateFormat mediumDate =DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);   
    6. DateFormat longDate =DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);   
    7. DateFormat fullDate =DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);   
    8.   
    9. system.out.println(shortDate.format(date));   
    10. System.out.println(mediumDate.format(date));   
    11. System.out.println(longDate.format(date));   
    12. System.out.println(fullDate.format(date));   
    13.   
    14. 08-4-15 下午3:24   
    15. 2008-4-15 15:24:31   
    16. 2008415日 下午032431秒   
    17. 2008415日 星期二 下午032431秒CST   
    18.   
    19.   
    20. Calendar c = Calendar.getInstance();   
    21.   
    22. c.add(Calendar.MONTH, 1); // 目前時間加1個月   
    23. System.out.println(df.format(c.getTime()));   
    24.   
    25. c.add(Calendar.HOUR, 3); // 目前時間加3小時   
    26. System.out.println(df.format(c.getTime()));   
    27.   
    28. c.add(Calendar.YEAR, -2); // 目前時間減2年   
    29. System.out.println(df.format(c.getTime()));   
    30.   
    31. c.add(Calendar.DAY_OF_WEEK, 7); // 目前的時間加7天   
    32. System.out.println(df.format(c.getTime()));   
    展开全文
  • java多线程累加计数

    万次阅读 2018-03-21 15:49:29
    java多线程计数 题目 给定count=0;让5个线程并发累加到1000; 思路 创建一个类MyRunnable,实现Runnable(继承Thread类也可) 定义一个公共变量count(初始值为0),5个线程都可以访问到; 创建5个线程并发递增...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
  • 我这里有大量的恶意请求流量,里面包含了各种各样的信息,请求头,请求体,协议,mac,IP,攻击手法,攻击者定位地址,攻击时间等等,但是有些时候攻击者的伪装或者引擎的某些问题,可能会导致其中的某些数据是空, 那我现在...
  • 有这样一个需求:用户签到,每天可以签到多次,获取每天签到的最开始和最晚的时间,得到当天的时间差,然后获取这段时间的总共签到时长。 package com.xxx.controller; import com.xxx.utils.DateUtil; import ...
  • 最近在项目中需要用到工作累计时间,所以就就写了一个小方法,作用是可以计算两个时间点之间的累积时间(即累积工作小时),这里头需要注意的是输入的日期格式为 “yyyy-MM-dd-HH”,目前测试过后,可以计算不同年月...
  • Java如何快速计算百亿数值的累加

    千次阅读 2019-07-10 17:47:42
    可以利用Java 1.8 新特性并行流操作 public class ForkJoinCalculate extends RecursiveTask<Long> { private long start; private long end; private static final long THRESHOLD= 10000L; public ...
  • package MyTest; /* * 演示 Calendar 的一般操作 ...import java.util.Date; import java.text.SimpleDateFormat; import java.text.DateFormat; import java.util.Calendar; public class Test { public Test() {
  • [超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分] 本章主要对原子累加器进行学习。 1.原子类型累加器 原子类型累加器是JDK1.8引进的并发新技术,它可以...
  • java时间加分钟

    千次阅读 2018-02-09 10:42:54
     //通过java  Calendar 实现时间+ 分钟  public static String addtime(String timeStr,String addnumber){  String str=null;  try {  DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");  Date ...
  • @Test public void test4(){ SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); /* * 获取15天后是多少号?... * 为当前calendar指定时间分量上累加给定值 * 若传入的是负...
  • 子数组的最大累加和问题 JAVA代码实现 【问题描述】 给定一个一维数组,返回子数组的最大累加和。 例如,arraydemo=[1,-2,3,5,-2,6,-1];所有子数组中,[3,5,-2,6]可以累加出最大的和12,所以返回12。 ...
  • BATJ都爱问的Java多线程面试题整理

    千次阅读 2018-11-05 10:26:30
    另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个...
  • 实验原理:建立一个长为2G (Java中最大长度为2G) 的整形数组,分成n份,然后让n个线程来对每一块进行求和,最后将每一块的各累计起来统计时间。 实验设备:Xeon E5-2600v2 @ 2.2 GHz (20 cores, Hyper-threading ...
  • Java 时间(日期)相加处理

    千次阅读 2015-08-30 21:26:27
     * 在程序中,经常要对时间进行操作,但是并没有时间类型的数据。那么,我们可以自己实现一个时间类,来满足程序中的需要。  * 定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second...
  • VC++时间计算器,包括计算某一天的星期,距离某一天的具体日期,计算平闰年等,利用ListControl显示近三周的信息。
  • 时间限制: 1 Sec 内存限制: 30 MB 提交: 26800 解决: 21793 [状态] [讨论版] [提交] [命题人:admin] 题目描述 求1! + 2! + ……n! 输入 输入一个整数n,你可以假定n不大于10。 输出 输出一个整数,即阶乘累加的结果...
  • 【算法】求连续子数组的最大累加和 一.问题描述: 1.输入:输入一个字符串,该字符串为一组数据,其中每个数据之间用“,”隔开。(即输入String类型字符串,通过String类的split()方法将字符串转为String类型数组...
  • java 时间的操作

    2008-12-17 16:19:21
    把开始时间到结束时间按月份拆分成多个段,比如2008-1-2 到 2008-4-2 ,可以拆分成4个月份的时间段。
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
  • 在数据库里面保存一个增加的时间日期的字段(如3个月,6个月,1年); 在数据库里保存了一个时时间日期字段(该字段需要和上面的字段相加) 疑问: 这两个字段我应该在数据库里面怎么保存,以datetime类型...
  • 例如:对当前时间+60秒的时间 上代码 Date date = new Date(); long time = 60*1000;//60秒 Date afterDate = new Date(now .getTime() + time);//60秒后的时间 Date beforeDate = new Date(now .getTime() - ...
  • //判断是否跨越了中午,指定的时间如果是在上午,加上时间量超过了午休时间就是跨越了中午,需要把多的时间加到下午去 if (calendar.getTime().before(lunchBreak) || calendar.getTime().equals(lunchBreak)) { ...
  • 一、java获取当前时间的集中方式 建议记住固定的api,因为是java的原生api,且在项目中会经常用到,记住之后可以手到擒来,其他的简单的api也建议可以背下来,同理。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,936
精华内容 14,374
关键字:

java时间累加

java 订阅