CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

求一个关于时间的公式或函数?

楼主yesyou888()2003-12-02 13:43:00 在 VB / 基础类 提问

求任意两个时间之间经过每一天的5点至10点这个时间段的总秒数的公式或函数?  
  期待您的完全解答,谢谢!  
   
  (区分任意两个时间的所有情况写一个函数或公式)  
  例一:  
  时间一2003-11-28   02:30:23到时间二2003-11-28   05:30:23经过每一天的5点至10点这个时间段的总秒数为1823秒  
  例二:  
  时间一2003-11-28   05:30:00到时间二2003-11-28   06:30:00经过每一天的5点至10点这个时间段的总秒数为3600秒  
  例三:  
  时间一2003-11-26   05:00:00到时间二2003-11-28   06:30:00经过每一天的5点至10点这个时间段的总秒数为23400秒  
  ...还有更多情况 问题点数:100、回复次数:17Top

1 楼szyhy810518()()回复于 2003-12-02 14:26:08 得分 0

没看懂?Top

2 楼yesyou888()回复于 2003-12-02 14:36:52 得分 0

就是写一个分段计费的算法!上面是计算任意两个时间之间经过每一天的某个时间段的总秒数!  
  例子已经够清楚了!Top

3 楼hhjjhjhj(大头)(http://office.9zp.com)回复于 2003-12-02 14:50:18 得分 0

一共才4种情况  
  t=5点至10点的全部秒数  
  d=时间二-时间一的天数  
  case   时间一的时间>5点   AND   时间二的时间<10点  
        SUMT=(时间二的时间-时间一的时间)+t*d  
  case   时间一的时间>5点   AND   时间二的时间>10点  
        SUMT=(10点的时间-时间一的时间)+t*d  
  case   时间一的时间<5点   AND   时间二的时间<10点  
        SUMT=(时间二的时间-5点的时间)+t*d  
  case   时间一的时间<5点   AND   时间二的时间>10点  
        SUMT=t+t*d  
   
  Top

4 楼yesyou888()回复于 2003-12-02 15:04:48 得分 0

如果不是5点和10点是任意的两个点也是一样的吗?你能写一个函数吗?如果测试正确马上给分!Top

5 楼lxcc()回复于 2003-12-02 15:18:47 得分 0

Private   Sub   Command1_Click()  
          MsgBox   DateDiff("s",   CDate("2003-12-01   05:00:00"),   CDate("2003-12-02   10:00:00"))  
  End   Sub  
  Top

6 楼lxcc()回复于 2003-12-02 15:20:05 得分 0

只要日期时间格式和值合法,均可计算差值,具体查MSDN的datediff函数Top

7 楼yesyou888()回复于 2003-12-02 15:52:44 得分 0

不是lxcc(虫子)   的意思  
  hhjjhjhj(大头)   方法是对的!但没有完全解答!  
  Top

8 楼victorycyz(--)回复于 2003-12-02 15:57:42 得分 0

先不要结,待我给你写一下。思路简单,就是有些罗嗦。Top

9 楼lxcc()回复于 2003-12-02 15:59:24 得分 0

sorry!没看清!Top

10 楼szyhy810518()()回复于 2003-12-02 16:04:28 得分 100

 
  Private   Function   PartTime_lng(dtmST   As   Date,   dtmET   As   Date)   As   Long  
           
          Dim   lngDay                                     As   Long  
           
          Dim   lngTempST5                             As   Long  
          Dim   lngTempET5                             As   Long  
          Dim   lngTempST10                           As   Long  
          Dim   lngTempET10                           As   Long  
          Dim   lngTemp                                   As   Long  
          Dim   lngPart                                   As   Long  
           
          Dim   dtmTime                                   As   Date  
          Dim   dtmTempST                               As   Date  
          Dim   dtmTempET                               As   Date  
           
          If   DateDiff("s",   dtmST,   dtmET)   <   0   Then  
                  lngDay   =   DateDiff("d",   dtmST,   dtmET)  
                   
                  dtmTempST   =   Format(dtmST,   "HH:mm:ss")  
                  dtmTempET   =   Format(dtmET,   "HH:mm:ss")  
                   
                  lngPart   =   DateDiff("s",   "05:00:00",   "10:00:00")  
                  lngTemp   =   DateDiff("s",   dtmTempST,   dtmTempET)  
                   
                  lngTempST5   =   DateDiff("s",   dtmTempST,   "05:00:00")  
                  lngTempET5   =   DateDiff("s",   dtmTempET,   "05:00:00")  
                  lngTempST10   =   DateDiff("s",   dtmTempST,   "10:00:00")  
                  lngTempET10   =   DateDiff("s",   dtmTempET,   "10:00:00")  
                   
                  If   lngTempST5   <=   0   And   lngTempST10   >=   0   Then  
                          If   lngTempET5   <=   0   And   lngTempET10   >=   0   Then  
                                  PartTime_lng   =   lngTemp   +   lngDay   *   lngPart  
                          ElseIf   lngTempET5   >   0   And   lngTempET10   >=   0   Then  
                                  PartTime_lng   =   lngTempST10   +   (lngDay   -   1)   *   lngPart  
                          ElseIf   lngTempET5   <=   0   And   lngTempET10   <   0   Then  
                                  PartTime_lng   =   lngTempST10   +   lngDay   *   lngPart  
                          End   If  
                  ElseIf   lngTempST5   >   0   And   lngTempST10   >=   0   Then  
                          If   lngTempET5   <=   0   And   lngTempET10   >=   0   Then  
                                  PartTime_lng   =   Abs(lngTempET5)   +   lngDay   *   lngPart  
                          ElseIf   lngTempET5   >   0   And   lngTempET10   >=   0   Then  
                                  PartTime_lng   =   lngDay   *   lngPart  
                          ElseIf   lngTempET5   <=   0   And   lngTempET10   <   0   Then  
                                  PartTime_lng   =   (lngDay   +   1)   *   lngPart  
                          End   If  
                  ElseIf   lngTempST5   <=   0   And   lngTempST10   <   0   Then  
                          If   lngTempET5   <=   0   And   lngTempET10   >=   0   Then  
                                  PartTime_lng   =   Abs(lngTempET5)   +   (lngDay   -   1)   *   lngPart  
                          ElseIf   lngTempET5   >   0   And   lngTempET10   >=   0   Then  
                                  PartTime_lng   =   (lngDay   -   1)   *   lngPart  
                          ElseIf   lngTempET5   <=   0   And   lngTempET10   <   0   Then  
                                  PartTime_lng   =   lngDay   *   lngPart  
                          End   If  
                  End   If  
                   
          Else                                                 '开始时间大于结束时间  
                  PartTime_lng   =   -1               '统一赋值为-1  
          End   If  
           
  End   Function  
  Top

11 楼yesyou888()回复于 2003-12-02 16:15:14 得分 0

最好将5点-10点(指每一天的)变为两个参数!再写一个函数!测试正确后马上给分!Top

12 楼Maconel(Maconel)回复于 2003-12-02 16:18:41 得分 0

hhjjhjhj(大头)   的四种情况外还有别的,因为还有日期  
  就是比如昨天的4:00到后天的11:00等等,所以要先判断   if   时间二   -   时间一>24小时Top

13 楼szyhy810518()()回复于 2003-12-02 16:23:10 得分 0

昏,这还要写两个参数,建议楼主你自己搞定!!  
   
  Top

14 楼planetike(胜哥哥)回复于 2003-12-02 16:36:03 得分 0

DateDiff就行,你自己参考一下MSDNTop

15 楼victorycyz(--)回复于 2003-12-02 16:40:29 得分 0

 
  Private   Function   GetSeconds(dtStart   As   Date,   dtEnd   As   Date)   As   Long  
          Dim   lSeconds   As   Long  
          Dim   intDay   As   Integer  
   
          intDay   =   DateDiff("d",   dtStart,   dtEnd)  
          If   intDay   =   0   Then   '起止时间在同一天  
                  lSeconds   =   IIf(DatePart("h",   dtEnd)   >   10,   36000,   Seconds(dtEnd))   -   IIf(DatePart("h",   dtStart)   <   5,   18000,   Seconds(dtStart))  
                  GetSeconds   =   IIf(lSeconds   <   0,   0,   lSeconds)     '这是考虑到起止时间没有经过5到10点的情况。  
              Else  
                  lSeconds   =   IIf(DatePart("h",   dtEnd)   >   10,   36000,   Seconds(dtEnd))   -   18000  
                  GetSeconds   =   IIf(lSeconds   <   0,   0,   lSeconds)  
                  lSeconds   =   36000   -   IIf(DatePart("h",   dtStart)   <   5,   18000,   Seconds(dtStart))  
                  GetSeconds   =   GetSeconds   +   IIf(lSeconds   <   0,   0,   lSeconds)  
                  If   intDay   >   2   Then                 '如果跨2天以上的日期,中间的日期的秒数是固定的:  
                          GetSeconds   =   GetSeconds   +   18000   *   (intDay   -   2)  
                  End   If  
          End   If  
  End   Function  
   
  '取得某个时间点从零点开始经过的秒数  
  Private   Function   Seconds(dtTime   As   Date)   As   Long  
      Seconds   =   DatePart("h",   dtTime)   *   3600   +   DatePart("n",   dtTime)   *   60   +   DatePart("s",   dtTime)  
  End   Function  
  Top

16 楼Random(随便)回复于 2003-12-02 16:42:31 得分 0

Public   Function   GetSecond(ByVal   StartTime   As   Date,   EndTime   As   Date)   As   Long  
          Dim   TmpTime   As   Date  
          Dim   StartDate   As   String,   EndDate   As   String  
          Dim   lngSec1   As   Long,   lngSec2   As   Long  
           
          If   EndTime   <   StartTime   Then  
                  TmpTime   =   StartTime  
                  StartTime   =   EndTime  
                  EndTime   =   TmpTime  
          End   If  
           
          StartDate   =   Format(StartTime,   "YYYY-M-D")  
          EndDate   =   Format(EndTime,   "YYYY-M-D")  
          If   CDate(StartDate   &   "   05:00:00")   >   StartTime   Then  
                  lngSec1   =   18000  
          ElseIf   CDate(StartDate   &   "   10:00:00")   <   StartTime   Then  
                  lngSec1   =   0  
          Else  
                  lngSec1   =   DateDiff("s",   StartTime,   CDate(StartDate   &   "   10:00:00"))  
          End   If  
          If   CDate(EndDate   &   "   05:00:00")   >   EndTime   Then  
                  lngSec2   =   0  
          ElseIf   CDate(EndDate   &   "   10:00:00")   <   EndTime   Then  
                  lngSec2   =   18000  
          Else  
                  lngSec2   =   DateDiff("s",   CDate(EndDate   &   "   05:00:00"),   EndTime)  
          End   If  
           
          GetSecond   =   18000   *   (DateDiff("d",   StartTime,   EndTime)   -   1)   +   lngSec1   +   lngSec2  
  End   Function  
  Top

17 楼liyd1978(阿东)回复于 2003-12-02 16:48:01 得分 0

不明白为什么不用   DateDiff   函数。  
  Top

相关问题

  • 时间的函数?
  • 用Date Time picker控件中的哪个函数取得它包含时间或者函数?
  • 如何测一个过程或函数的运行时间?
  • 怎么加时间函数?
  • Access内的时间函数
  • 时间函数问题
  • varchar转时间函数???
  • 求一段时间函数
  • 关于时间函数。
  • 有没有专门用来取得TDateTime的日期或时间的函数?

关键词

  • 函数
  • date
  • lngtempet
  • lngday
  • parttime
  • dttime
  • lngtempst
  • lngsec
  • 时间
  • lngpart elseif

得分解答快速导航

  • 帖主:yesyou888
  • szyhy810518

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo