---求一个取时间的小算法.....

问题描述

我也不知道怎么描述有个任务每5分钟循环我要根据当前时间取得上个时间点(秒不要)比如固定分钟都是0106当前时间=取得的时间12:30:02=12:26:0012:31:00=12:31:0012:33:09=12:31:0012:37:12=12:36:00

解决方案

解决方案二:
什么东西
解决方案三:
什么鬼……没懂
解决方案四:
dt.Minute/5*5+1
解决方案五:
DateTime.Now.AddMinutes(-4)
解决方案六:
接上再修正其它部分假设上面上面结果是dt那么dt.Date.AddHours(dt.Hours).AddMinutes(dt.Minutes)最后你的例子没看懂,为啥33得到的数据是31
解决方案七:
没看懂,是5分钟执行一次循环,还是一个循环控制在5分钟内
解决方案八:
引用5楼starfd的回复:

接上再修正其它部分假设上面上面结果是dt那么dt.Date.AddHours(dt.Hours).AddMinutes(dt.Minutes)最后你的例子没看懂,为啥33得到的数据是31

不好意思我没描述清楚这样我以彩票开奖做个例子彩票开奖每5分钟开一次固定是逢1逢6开那么我就要实时取到上一期的开奖时间比如第1期开奖时间12:0112:0612:1112:1612:21......那现在当前时间是12:33那么就要知道上一期是12:31开的当前时间是12:27那上期就是12:26不知道这样大家能明白了吗
解决方案九:
上N期的开奖时间t=DateTime.Now.AddMinutes(-5*N);引用7楼baidu_33198489的回复:

比如那现在当前时间是12:33那么就要知道上一期是12:31开的当前时间是12:27那上期就是12:26不知道这样大家能明白了吗

没看懂啊
解决方案十:
//date1是当前时间//date2就是最接近的1分或6分的时间DateTimedate2=newDateTime((date1.Ticks-600000000L)/3000000000L*3000000000L+600000000L);

解决方案十一:
引用3楼caozhy的回复:

dt.Minute/5*5+1

呵呵
解决方案十二:
引用3楼caozhy的回复:

dt.Minute/5*5+1

这个就能实现你的目的了
解决方案十三:
引用11楼wow818wow的回复:

Quote: 引用3楼caozhy的回复:
dt.Minute/5*5+1

这个就能实现你的目的了

算了下,好像不对。(dt.Minute-1)/5*5+1
解决方案十四:
我看懂了,楼主的意思,我来表述一下:当前时间=取得的时间12:30:02=12:26:0012:31:00=12:31:0012:33:09=12:31:0012:37:12=12:36:00

假定第一行成立,那么1.在12:26分的时候做过一次执行;2.那么下一次的执行时间应该是12:31,所以当前时间正好与上一次应该执行的时间相吻合(因为当前时间可能有秒数,所以12:31就是相对当前时间的上一次执行时间),所以这个时候,返回当前时间3.再下一次的执行时间是31+5,即12:36,12:33还没到36分,所以返回依旧是上次执行时间12:314.同理,12:37的上一次执行时间就是12:36
解决方案十五:
要么就想办法拼结果,取出当前的时、分,判断分的最后一位,如果是1~5,则是1,6~9,则是6,如果是0,则减4分钟。
解决方案:
这道题实际上,分两部分,一部分是对于小时数的叠加,一部分是总的分钟数去掉小时数(mod60)之后的叠加。对于第一部分,我们只需要知道两个datetime相减之后的timespan,就能知道总共间隔了多少个hours,mod60以后,我们便能知道剩下的不足一小时的分钟数,在这不足一小时的分钟数里面,只要加上5的倍数的分钟数即可,比如36分钟,那么我们只要加上35分钟即可。最后,把second清零就OK了。publicstaticDateTimeGetLastExecTime(DateTimefirstExecTime,DateTimecurrentTime){vartimespan=currentTime-firstExecTime;varhours=(int)timespan.TotalHours;varminutes=((int)timespan.TotalMinutes-hours*60)/5*5;returnfirstExecTime.AddHours(hours).AddMinutes(minutes).AddSeconds(-1*firstExecTime.Second);}

解决方案:
开奖是个真实的事件,并且需要长期保存中奖号码及相关信息,用于兑奖和查询所以上一次开奖时间不是计算得到的,而是查表得到的。因为他曾真实的发生过而下一次开奖时间是可以计算预计值的
解决方案:
可以这样查询你要的时间publicstaticDateTimeCalc(int[]minutes){vardt=DateTime.Parse(DateTime.Now.ToString("yyyy-MM-ddHH:mm"));while(!minutes.Contains(dt.Minute))dt=dt.AddMinutes(-1);returndt;}

例如vardatetime=Calc(newint[]{1,6,11,16,21,26,31,36,41,46,51,56});

解决方案:
引用14楼zbdzjx的回复:

要么就想办法拼结果,取出当前的时、分,判断分的最后一位,如果是1~5,则是1,6~9,则是6,如果是0,则减4分钟。

如果是10呢?
解决方案:
你也可以扩展一下第二个参数,让它能够计算其它的起始时间publicstaticDateTimeCalc(int[]minutes,DateTime?startTime=null){if(!startTime.HasValue)startTime=DateTime.Now;vardt=DateTime.Parse(startTime.Value.ToString("yyyy-MM-ddHH:mm"));while(!minutes.Contains(dt.Minute))dt=dt.AddMinutes(-1);returndt;}

解决方案:
判断分钟最后一个数,如果小于6,则等于1,否则,等于6
解决方案:
引用20楼ligyu110的回复:

判断分钟最后一个数,如果小于6,则等于1,否则,等于6

那要是59,等于几?
解决方案:
TimeSpantaskInterval=TimeSpan.FromMinutes(5);//每5分钟一个任务DateTimetaskOrigion=DateTime.Today.AddMinutes(1);//设当天半夜00:01执行第一个任务DateTimenow=DateTime.Now;//当前时间//上一次任务的时间DateTimelastTaskAt=taskOrigion+TimeSpan.FromMinutes(Math.Floor((now-taskOrigion).TotalMinutes/taskInterval.TotalMinutes)*taskInterval.TotalMinutes);

注意:代码未经测试。
解决方案:
其实楼主的问题不过是以5分钟(其实可以为任意值)为一个单位,度量当前时间(相对于一个指定起始点),并取整,而已。
解决方案:
引用18楼sp1234的回复:

Quote: 引用14楼zbdzjx的回复:
要么就想办法拼结果,取出当前的时、分,判断分的最后一位,如果是1~5,则是1,6~9,则是6,如果是0,则减4分钟。

如果是10呢?

有说:如果是0,则减4分钟。因为可能会存在跨小时、跨天的可能。
解决方案:
//dtNow:现在时间dt:任意一次执行时间interval:执行间隔//返回上次执行时间publicDateTimeGetTime(DateTimedtNow,DateTimedt,intinterval){intx=dtNow.Minute%interval;inty=dt.Minute%interval;DateTimedtResult;if(x==y){dtResult=dtNow;}elseif(x>y){dtResult=dtNow.AddMinutes(y-x);}else{dtResult=dtNow.AddMinutes(x-interval+y));}returnDateTime.Parse(dtResult.Hour.ToString()+":"+dtResult.Minute.ToString()+":00");}

解决方案:
可以直接返回returndtResult.AddSeconds(-dtResult.Second);这样跨天就没问题了。引用25楼BitCoffee的回复:

//dtNow:现在时间dt:任意一次执行时间interval:执行间隔//返回上次执行时间publicDateTimeGetTime(DateTimedtNow,DateTimedt,intinterval){intx=dtNow.Minute%interval;inty=dt.Minute%interval;DateTimedtResult;if(x==y){dtResult=dtNow;}elseif(x>y){dtResult=dtNow.AddMinutes(y-x);}else{dtResult=dtNow.AddMinutes(x-interval+y));}returnDateTime.Parse(dtResult.Hour.ToString()+":"+dtResult.Minute.ToString()+":00");}

解决方案:
参数任意一次执行时间只需要分钟数即可,不需要完整的时间。
解决方案:
引用25楼BitCoffee的回复:

//dtNow:现在时间dt:任意一次执行时间interval:执行间隔//返回上次执行时间publicDateTimeGetTime(DateTimedtNow,DateTimedt,intinterval){intx=dtNow.Minute%interval;inty=dt.Minute%interval;DateTimedtResult;if(x==y){dtResult=dtNow;}elseif(x>y){dtResult=dtNow.AddMinutes(y-x);}else{dtResult=dtNow.AddMinutes(x-interval+y));}returnDateTime.Parse(dtResult.Hour.ToString()+":"+dtResult.Minute.ToString()+":00");}

这个好。
解决方案:
publicstaticvoidMain(string[]args){//分钟显示情况intminVal=1;intmaxVal=6;DateTimedt=DateTime.Parse("2016-01-1514:03");intmins=dt.Minute%10;if(mins>=maxVal){dt=dt.AddMinutes(-(mins-maxVal));}elseif(mins==0){//0特殊处理。小时或日期可能改变。dt=dt.AddMinutes(10-maxVal);}else{dt=dt.AddMinutes(-(mins-minVal));}Console.ReadLine();}

解决方案:
dt=dt.AddMinutes(10-maxVal);写错了是dt=dt.AddMinutes(-(10-maxVal));
解决方案:
[1,6)1[6,11)6将区间-1[0,5)0[5,10)5((minute-1)/10*10)+(minute-1)%10>5?6:1

时间: 2024-10-29 09:20:50

---求一个取时间的小算法.....的相关文章

求一个数学难题的算法

问题描述 求一个数学难题的算法 F0=1000F1=F0*a-30;F2=F1*a-30;F3=F2*a-30;... ....Fn-1=Fn-2*a-30Fn=Fn-1*a-30 Fn=0;输入n;输出a 解决方案 #include <stdio.h>int n;double a;double fun(int tInputValue){ if(tInputValue == 0) return 1000.0; else return fun(tInputValue-1)*a-30;}int m

jquery插件-jquery.bootgrid插件如何实现数据的分页显示,求一个简单地小例子~~

问题描述 jquery.bootgrid插件如何实现数据的分页显示,求一个简单地小例子~~ 感觉它是一个非常不错的数据分页显示框架,希望能够学会,可是在网上没有查到类似的资料,大家有用过的吗? 解决方案 http://www.jquery-bootgrid.com/Examples 解决方案二: 这个我看过了,但是代码不全,有部分不知道怎么写

异步-求一个php+jQuery小程序。

问题描述 求一个php+jQuery小程序. php+jQuery实现输入用户id,异步输出数据库中该id的用户信息.最简单的就好! 解决方案 http://jcyzone.iteye.com/blog/1733668 解决方案二: http://www.jb51.net/article/20733.htmhttp://phpway.blog.163.com/blog/static/212112005201301153512311/ 解决方案三: 那不是很容易么..得到id,,发送ajax请求,

java-各位大神,急求一个访问数组的算法

问题描述 各位大神,急求一个访问数组的算法 现有三维数组 int[][][] a 而且 *a[i].length != a[j].length a[x][i].length != a[x][j].length* 希望实现以下遍历; a[0][0][] a[1][0][] ... a[a.length-1][0][] a[0][1][] a[1][0][] ... a[a.length-1][0][] a[0][2][] a[1][0][] ... a[a.length-1][0][] ... .

求一个正弦波插值的算法

问题描述 现在有一个1024点精度的正弦波,保存在x[1024]和y[1014]两个数组里面想把精度提高到4096,要求正弦波插值,吧x[1024变成x[4096]吧y[1024]变成y[4096]要求插值后的曲线尽量平滑求一个插值的算法

求一个javascript的网格算法

问题描述 求算法:给你2个点[1,1] [3,4]求着2个点 围成的长方形 所占的所有单元格的数组如图 解决方案 int x1=1; int x2=1;//点一[1,1] int y1=9; int y2=9; //点二[9,9] for (int i = x1; i < y1; i++) { for (int j = x2; j < y2; j++) { System.out.println(i+"-"+j); } }这是Java代码. 你看着改吧.

求一个关于离散数学的算法

问题描述 用程序实现将表达式(aandb)not(cor(dande))化简成(aandb)(notcand(notdornote))就是用程序实现将一个表达式化简成一个主合取范式的形式,有人会吗?谢谢大家了!!! 解决方案 解决方案二:化简是人脑做的,运算是电脑做的要想程序实现这个东东,除非你先让他能理解离散数学的运算规则解决方案三:大家帮帮忙好吗解决方案四:不懂解决方案五:不是想帮忙就能帮上的计算机知道什么是"简"什么是"繁"不?你的问题是人工职能范畴的,在这恐

java-一个简单的小算法求助

问题描述 一个简单的小算法求助 找出一个数组中既不是最大的数也不是最小的数,我的java代码如下(错误的): class NotMM{ public void NotMM(int arr[]){ int mid = arr[0]; for(int i=0;i<arr.length-2;i++){ if(arr[i+1]>arr[i]&&arr[i+1]<arr[i+2]){ mid = arr[i+1]; }else if(arr[i+1]<arr[i]&&

javascript-Javascript 一个小算法!

问题描述 Javascript 一个小算法! 给定一个Javascript二维数组,如何得到其笛卡尔积. var Test = new Array(); Test[0] = new Array(1, 2, 3); Test[1] = new Array(4, 5, 6); 二维数组长度不固定. 求大神解答! 解决方案 很简单,两层循环就可以了. 解决方案二: 要是多个数组,不止两个,就递归. 解决方案三: var Test = new Array(); var rst=[]; Test[0] =