精华内容
下载资源
问答
  • 假设我想计算一下,从我...总体过程如下:1:用datetime对象实例你具体的出生年月日,这个就作为一个起始的时间2:然后用一个输入函数来输入你的终止时间3:然后将这个输入的字符串,转换成datetime对象4:两个datet...

    假设我想计算一下,从我出生到现在为止,或者某一段时间间隔,一共有多少年,多少天? 多少秒应该怎么办?

    我们当然不会去手算这个差距了。这太麻烦了。

    要想算这个时间差距的话,我们需要用到datetime对象。

    总体过程如下:

    1:用datetime对象实例你具体的出生年月日,这个就作为一个起始的时间

    2:然后用一个输入函数来输入你的终止时间

    3:然后将这个输入的字符串,转换成datetime对象

    4:两个datetime对象相减,然后就得到了一个timedelta对象。该对象表示两个时间的差值

    5:我们就可以使用这个timedelta对象的一些属性来获得这段时间间隔内的一些具体的数值

    具体的代码如下

    8a73d998a8977684bca791e7a0ba9868.png

    代码中的: strptime() 的作用就是将你输入的字符串转换成相对应的datetime对象

    但是在这个转换的过程中,我们还要先设置好 格式模板。也就是说,只有符合这个模板的字符串,才能够被转换成相对应的datetime对象

    0cf04fa38df7074e2088592aef8e018b.png
    代码的具体运行结果如图所示

    既然有这个将字符串转换成datetime对象的代码,就有完全相反的操作。

    将字符串转换成datetime对象

    就是strftime() 这个strftime() 就是将datetime对象转换成字符串

    同样我们也要先设置好相对应的转换的格式模板,然后就会将datetime对象,转换成这个格式模板的样子

    a6973d2450acac196a654b314eab14d9.png

    strftime()使用的时候 就是用具体的datetime对象去调用这个方法,然后括号里面就是的参数就是格式化模板

    08495f1137d72fa12d63fdf78ec3e467.png
    终端区的结果

    Q:怎么区分 strftime和strptime的作用呢?

    A:

    首先从名字上来说:

    strftime中的f 是format :格式化的意思,就是将datetime对象,格式化成,人能看懂的形式

    strptime中的p 是parse :解析的意思,就是将字符串解析成计算机能够用来计算的datetime对象


    然后从调用上来说:

    1:strptime是类方法,也就是用 datetime.strptime(字符串, 模板) 这样的格式来调用

    2:strftime是实例方法,也就是用 datetime对象.strftime(模板) 这样的格式来调用

    展开全文
  • 多个日期时间段进行合并,出经历的时长背景描述思路代码 背景描述 ...我们在程序中,可以将多个时间段中的两段分别“冒泡”比较,如果有重叠,那么进行合并,将这两个段去除,将合并后的时间段加入,...

    多个日期时间段进行合并,算出经历的时长

    背景描述

    在公司进行人员描图模块开发时,涉及到了人员参会时长和参会次数的数据,比如一个人,两个月内开了14次会议。这里面就涉及到了,如果这个人参加的两个甚至多个会议有重叠的部分,这样的时间如何通过程序去进行合并处理。

    思路

    我们在程序中,可以将多个时间段中的两段分别“冒泡”比较,如果有重叠,那么进行合并,将这两个段去除,将合并后的时间段加入,得到的新的时间段的列表,重复上面的过程,直到没有重叠的时间段为止(递归

    代码示例

    1. 定义一个类,类中有两个方法,getOverlapTimegetTimeBucketList

    方法getOverlapTime:

    public void getOverlapTime() throws ParseException {
    		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		
    		List<TimeBucket> timeBucketList = new ArrayList<TimeBucket>();
    		timeBucketList.add(new TimeBucket("2019-10-29 13:30:00", "2019-10-29 16:30:00"));
    		timeBucketList.add(new TimeBucket("2019-10-29 13:30:00", "2019-10-29 17:30:00"));
    		timeBucketList.add(new TimeBucket("2019-10-30 14:30:00", "2019-10-30 17:30:00"));
    		timeBucketList.add(new TimeBucket("2019-10-30 15:30:00", "2019-10-30 18:30:00"));
    		timeBucketList.add(new TimeBucket("2019-10-30 16:30:00", "2019-10-30 19:30:00"));
    		
    		List<TimeBucket> timeBucketList2 = getTimeBucketList(timeBucketList);
    		for (TimeBucket timeBucket : timeBucketList2) {
    			String format = dateFormat.format(timeBucket.getStart());
    			String format2 = dateFormat.format(timeBucket.getEnd());
    			System.out.println(format+"    "+format2);
    		}
    		
    	}
    

    方法getTimeBucketList:

    public List<TimeBucket> getTimeBucketList(List<TimeBucket> timeBucketList ) throws ParseException{
    		List<TimeBucket> myTimeBucketList = timeBucketList;
    		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		
    		Map<String, Integer> union = TimeBucket.union(myTimeBucketList);
    		
    		if(union!=null) {
    			Integer i = union.get("i");
    			Integer j = union.get("j");
    			String start = null;
    			String end = null;
    			if(i.intValue()==j.intValue()) {//这条记录是多余的
    				TimeBucket timeBucket = myTimeBucketList.get(i);
    				myTimeBucketList.remove(timeBucket);
    			}else {
    				TimeBucket timeBucket = myTimeBucketList.get(i);
    				String startTime1 = dateFormat.format(timeBucket.getStart());
    				String endTime1 = dateFormat.format(timeBucket.getEnd());
    				
    				TimeBucket timeBucket2 = myTimeBucketList.get(j);
    				String startTime2 = dateFormat.format(timeBucket2.getStart());
    				String endTime2 = dateFormat.format(timeBucket2.getEnd());
    				
    				if(startTime1.compareTo(startTime2)<=0) {
    					start = startTime1;
    				}else {
    					start = startTime2;
    				}
    				
    				if(endTime1.compareTo(endTime2)>=0) {
    					end = endTime1;
    				}else {
    					end = endTime2;
    				}
    				TimeBucket bucket = new TimeBucket(start,end);
    				myTimeBucketList.remove(timeBucket);
    				myTimeBucketList.remove(timeBucket2);
    				myTimeBucketList.add(bucket);
    			}
    			getTimeBucketList(myTimeBucketList);
    		}	
    		return myTimeBucketList;
    	}
    
    1. getTimeBucketList方法接收的是一个时间段列表,返回的是一个不存在重复时间段的时间段列表,这里最关键的是TimeBucket类,这里有找出哪个重复的时间段,在myTimeBucketList里的角标
    public class TimeBucket {
    
    	private static final ThreadLocal<DateFormat> FORMATS = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    
        private final Date start;
    
        private final Date end;
    
        public TimeBucket(Date start, Date end) {
            if (start.after(end)) {
                throw new IllegalArgumentException("时间段无效(开始日期需要小于结束日期)");
            }
            this.start = start;
            this.end = end;
        }
    
        public TimeBucket(String start, String end) throws ParseException {
            this(parse(start), parse(end));
        }
    
        public TimeBucket(long startTime, long endTime) {
            this(new Date(startTime), new Date(endTime));
        }
    
        /**
         * TimeBucket会返回重叠的时间段
         * 若返回null说明没有重叠的时间段
         *
         * @param buckets 时间段
         * @return
         */
        public static Map<String, Integer> union(List<TimeBucket> buckets) {
        	
        	List<Map<String, String>> list = new ArrayList<Map<String,String>>();
        	
        	DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        	
            //长度为1无需判断
            if (buckets == null || buckets.size() <= 1) {
                return null;
            }
            for (int i = 0; i < buckets.size() - 1; i++) {
                String start = dateFormat.format(buckets.get(i).getStart());
                String tempStart = start;
                String end = dateFormat.format(buckets.get(i).getEnd());
                String tempEnd = end;
                for (int j = i + 1; j < buckets.size(); j++) {
                	
                	String start2 = dateFormat.format(buckets.get(j).getStart());
                	String end2 = dateFormat.format(buckets.get(j).getEnd());
                	
                    if (start.compareTo(start2)<0) {
                        start = start2;
                    }
                    if (end.compareTo(end2)>0) {
                        end = end2;
                    }
                    if (start.compareTo(end)<0) {
                   	
                    	Map<String, Integer> map = new HashMap<String, Integer>();
                    	map.put("i", i);
                    	map.put("j", j);
                    	return map;
                    }else {
                    	start = tempStart;
                    	end = tempEnd;
                    }
                }
            }
            return null;
        }
    
        public Date getStart() {
            return start;
        }
    
        public Date getEnd() {
            return end;
        }
    
        public long getStartTime() {
            return start.getTime();
        }
    
        public long getEndTime() {
            return end.getTime();
        }
    
        private static Date parse(String str) throws ParseException {
            return FORMATS.get().parse(str);
        }
    
        private static String format(Date str) {
            return FORMATS.get().format(str);
        }
    
        @Override
        public String toString() {
            return MoreObjects.toStringHelper(this)
                    .add("start", format(start))
                    .add("end", format(end))
                    .toString();
        }
    }
    

    对getTimeBucketList进行递归,每次都会合并重复的时间段,直到不需要进行合并,结束递归,进行返回,这样就可以获取到了不重复的时间段列表,遍历获取每个时间段的开始和结束时间,进行计算即可。

    展开全文
  • 假设我想计算一下,从我...总体过程如下:1:用datetime对象实例你具体的出生年月日,这个就作为一个起始的时间2:然后用一个输入函数来输入你的终止时间3:然后将这个输入的字符串,转换成datetime对象4:两个datet...

    假设我想计算一下,从我出生到现在为止,或者某一段时间间隔,一共有多少年,多少天? 多少秒应该怎么办?

    我们当然不会去手算这个差距了。这太麻烦了。

    要想算这个时间差距的话,我们需要用到datetime对象。

    总体过程如下:

    1:用datetime对象实例你具体的出生年月日,这个就作为一个起始的时间

    2:然后用一个输入函数来输入你的终止时间

    3:然后将这个输入的字符串,转换成datetime对象

    4:两个datetime对象相减,然后就得到了一个timedelta对象。该对象表示两个时间的差值

    5:我们就可以使用这个timedelta对象的一些属性来获得这段时间间隔内的一些具体的数值

    具体的代码如下

    e4a8fb47115f762e77781634b9ac3ca7.png

    代码中的: strptime() 的作用就是将你输入的字符串转换成相对应的datetime对象

    但是在这个转换的过程中,我们还要先设置好 格式模板。也就是说,只有符合这个模板的字符串,才能够被转换成相对应的datetime对象

    0c9451840c3746b27e3ba060bbccf32c.png
    代码的具体运行结果如图所示

    既然有这个将字符串转换成datetime对象的代码,就有完全相反的操作。

    将字符串转换成datetime对象

    就是strftime() 这个strftime() 就是将datetime对象转换成字符串

    同样我们也要先设置好相对应的转换的格式模板,然后就会将datetime对象,转换成这个格式模板的样子

    8cb469885b946d8383a14066a37c6746.png

    strftime()使用的时候 就是用具体的datetime对象去调用这个方法,然后括号里面就是的参数就是格式化模板

    b74efa7cbc3371c5fa615dca8841c31f.png
    终端区的结果

    Q:怎么区分 strftime和strptime的作用呢?

    A:

    首先从名字上来说:

    strftime中的f 是format :格式化的意思,就是将datetime对象,格式化成,人能看懂的形式

    strptime中的p 是parse :解析的意思,就是将字符串解析成计算机能够用来计算的datetime对象


    然后从调用上来说:

    1:strptime是类方法,也就是用 datetime.strptime(字符串, 模板) 这样的格式来调用

    2:strftime是实例方法,也就是用 datetime对象.strftime(模板) 这样的格式来调用

    展开全文
  • 假设我想计算一下,从我...总体过程如下:1:用datetime对象实例你具体的出生年月日,这个就作为一个起始的时间2:然后用一个输入函数来输入你的终止时间3:然后将这个输入的字符串,转换成datetime对象4:两个datet...

    假设我想计算一下,从我出生到现在为止,或者某一段时间间隔,一共有多少年,多少天? 多少秒应该怎么办?

    我们当然不会去手算这个差距了。这太麻烦了。

    要想算这个时间差距的话,我们需要用到datetime对象。

    总体过程如下:

    1:用datetime对象实例你具体的出生年月日,这个就作为一个起始的时间

    2:然后用一个输入函数来输入你的终止时间

    3:然后将这个输入的字符串,转换成datetime对象

    4:两个datetime对象相减,然后就得到了一个timedelta对象。该对象表示两个时间的差值

    5:我们就可以使用这个timedelta对象的一些属性来获得这段时间间隔内的一些具体的数值、

    具体的代码如下:

    代码中的: strptime()的作用就是将你输入的字符串,转换成相对应的datetime对象。

    但是在这个转换的过程中,我们还要先设置好 格式模板。也就是说,只有符合这个模板的字符串,才能够被转换成相对应的datetime对象。代码的具体运行结果如图所示

    既然有这个将字符串转换成datetime对象的代码,就有完全相反的操作。

    将字符串转换成datetime对象:

    就是strftime() 这个strftime() 就是将datetime对象转换成字符串,

    同样我们也要先设置好相对应的转换的格式模板,然后就会将datetime对象,转换成这个格式模板的样子。

    strftime()使用的时候 就是用具体的datetime对象去调用这个方法,然后括号里面就是的参数就是格式化模板。终端区的结果

    Q:怎么区分strftime和strptime的作用呢?

    A:

    首先从名字上来说:

    strftime中的f 是format :格式化的意思,就是将datetime对象,格式化成,人能看懂的形式

    strptime中的p 是parse :解析的意思,就是将字符串解析成计算机能够用来计算的datetime对象

    然后从调用上来说:

    1:strptime是类方法,也就是用 datetime.strptime(字符串, 模板)这样的格式来调用

    2:strftime是实例方法,也就是用 datetime对象.strftime(模板) 这样的格式来调用

    展开全文
  • 学校课设作业,要弄一个酒店管理系统,今年刚学c++,想请教一下如何获取当前系统时间(最好是可以用来计算),并且可以计算两个时间段的函数,大概思路可以是怎样,请教各位大神
  • 算命感情婚姻--怎么看两个人有没有感情缘分_男人八字怎么看两个人婚姻缘分深 不管男女都希望是可以拥有一幸福婚姻,对于男人来说找到一个和自己心灵合一伴侣也是相当幸福两个人之间缘分也属于是...
  • 段时间工作中,需要对比两个Excel中对应数据是否相同匹配(保证每一行中每一列数据都相同才匹配),两个表都有15列,加起来超过150w行,如果用vlookup则相当费时间,而且Excel非常容易崩溃。 我发现比如以下:...
  • 各位大侠好,最近在做工具时HttpURLConnection访问一视频网站,然后如何让它停顿十几秒钟?而且这停顿不算在观看视频?用 sleep 和 Timer 都不行,就好像直接跳过这句了,其实要实现功能就是:...
  • 时间复杂度是学习算法的基石,今天我们来聊聊为什么要引入时间复杂度,什么是时间复杂度以及如何算法的时间复杂度 一、刻画算法的运行时间 某日,慧能叫来了一尘打算给他补习补习一下基础知识,只见克写了...
  • 用这标题,是因为前一段时间组里有一开放式讨论:怎样才好重构? 其实,"好"与"坏"向来都是相对,因为每人眼中看待"好"与"坏"标准不一样,不如从自身角度考虑一下:如何做一好重构? 先来看一...
  • ucos 时间戳】如何测量程序的运行时间,精度为ns级别ucos-iii 源码中,有一个功能是测量关中断时间的功能,使用的是STM32的时间戳,即记录程序运行的某个时刻,如果记录下程序前后的两个时刻点,即可以出这程序...
  • 收录了1994~2002年试题与解析。 NOI 收录了1001~2009年试题、解析与测试数据。 NOIP 收录了1995~2018年初赛试题与参考答案。 收录了1995~2018年复赛试题、测试数据与部分参考程序。 书《全国青...
  • 高中问题,怎么凭两个法向量余弦值确定这两个二面角余弦值?​www.zhihu.com然而这个回答还是没有完全地表达我想表述意思. 于是想到写这样一篇文章来简单聊一聊.你可能知道:用向量外积(叉积)表示...
  • (08:57:59和08:58:03算两个分钟)这个就当你说清楚了,然后@漫天de光: 整了半天,你就是想一句话搞定是吧?基本上没有意义,如果你不纠结于一句SQL搞定话,我相信你也很快能写出代码来。需求不...
  • (08:57:59和08:58:03算两个分钟)这个就当你说清楚了,然后@漫天de光: 整了半天,你就是想一句话搞定是吧?基本上没有意义,如果你不纠结于一句SQL搞定话,我相信你也很快能写出代码来。需求不...
  • 段时间学员小D咨询到:有什么简便方法,可以将将...仔细一想,不行,前面英文单词不一定是一个词,有些两个词中间也有空格,每一列长度都是不固定。我们一起来思考一下,这个问题解决方案。我们在处理Ex...
  • 如何快速成为Javascript高手?  之前我拿这问题问过我同事,也问过国内一些Javascript高手。  最近,我一直在拿这问题问自己。...第二、我学习和使用Javascript也有一段时间了,并且自己学习还努...
  • 我写文章有两个阶段。第一个阶段,是确定选题和素材。这个阶段,我会筛选出一个有用选题,并从自己知识库中,搜集相关材料,逐一溯源,构建出一个原始素材池。这项工作一般在碎片时间进行。阅读、聊天、散步...
  • 不一次整块的时间(dt)移动的距离,而是把dt分成固定的时间片,通过多次update固定的时间片来计算dt时间后应该到什么位置。 比较抽象,我们直接看代码: <pre><code> ...
  • 疫情期间,我是如何完成学习任务

    千次阅读 热门讨论 2020-04-04 09:18:20
    这两天终于复工了,了一下,从2月10号到3月31号,将近两个的时间在家学习。因这时间比较特殊,所以记录一下这时间在家的学习状况,仅仅是记录,没有什么技术含量。 二、这段时间的任务情况 博客 二月份博客...
  • 如何快速成为javascript高手?  之前我拿这问题问过我同事,也问过国内...第二、我学习和使用javascript也有一段时间了,并且自己学习还努力。  思来想去,我觉得我应该先回答下这问题:如何提高自己学...
  • 时间复杂度是学习算法的基石,今天我们来聊聊为什么要引入时间复杂度,什么是时间复杂度以及如何算法的时间复杂度 刻画算法的运行时间 某日,克叫来了慧子打算给他补习补习一下基础知识,只见克写了...
  • 如何快速成为javascript高手?...第二、我学习和使用javascript也有一段时间了,并且自己学习还努力。  思来想去,我觉得我应该先回答下这问题:如何提高自己学习效率?  想象一下学校场景,有一些
  • 如何快速成为javascript高手?...第二、我学习和使用javascript也有一段时间了,并且自己学习还努力。  思来想去,我觉得我应该先回答下这问题:如何提高自己学习效率?  想象一下学校场景,有一些...
  • 结果在阿里6面的时候被拒绝了,理由是因为他跳槽过于频繁,在八年的时间里待了6家公司,下来没有一家公司待的能超过的时间。面试官认为他的稳定性不是很好,就淘汰了。这不寻常的面试经历引起了程序员们的...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 220
精华内容 88
关键字:

如何算两个时间的时间段