VB中的时间处理问题

编程中常常会与时间打交道,vb编程自然也不例外。以下就谈谈我在这方面的一点经验。
  vb中提供了很多变量类型,date型就是专门用了存储时间的。
  1、date型变量及其相关函数。
  在内部,一个date占8个字节的内存,你可以方便地用它来存储日期和时间。给date变量赋值是很容易的。但请保证输入顺序与系统默认的时间表示顺序相同。例如:
  dim d as date
  d = #5/23/99 11:45:34 am#
  dateserial函数可以把年、月、日的数字组合成一个date值。timeserial函数可把小时、分、秒的数字组合成一个date值。且两函数可以叠加。
  d = dateserial(1999, 5, 23) + timeserial(11, 45, 34)
  而datevalue 和timevalue 函数则可将代表日期和时间的字符串转化为date型,并且也可以叠加。
  d = datevalue(“1999/ 5/ 23”) + timevalue(“11: 45: 34”)
  format函数可按预定的格式显示或打印一个date变量。如:

  print format(d, “general date”) `99-5-23 11:45:34
  print format(d, “long date”) `1999年5月23日
  print format(d, “medium date”) `99-05-23
  print format(d, “short date”) `99-5-23
  print format(d, “long time”) `11:45:34
  print format(d, “medium time”) `11:45 am
  print format(d,“short time”) `11:45
  format函数也允许你自己规定显示格式。如:
  print format(d, “mmmm”) `may 产生日期中月份的英文
  以以上日期为例,如想显示其中的一部分信息可使用以下函数:
  print month(d) `5
  print day(d) `23
  print year(d) `1999
  print hour(d) `11
  print minute(d) `45
  print second(d) `34
  print weekday(d)`1
  weekday 提供了一组内部常量,vbsunday代表1,直到 vbsaturday代表7。
  now 函数可返回今天的日期及时间。如:
  private sub form_click()
  dim d as date
  d = now
  print d
  end sub
  灵活地应用以上的函数,可以大大地简化你的程序。例如想计算10000秒等于几小时几分几秒可写为:
  private sub form_click()
  dim d as date
  d = timeserial(0, 0, 10000)
  print d
  end sub
   结果为2:46:40。
  2、与时间相关的常用控件。
  timer控件是一个奇特的控件。timer 控件会在固定时间间隔中运行timer事件。此间隔是由interval属性决定的,其单位为千分之一秒。但不要以为将其值设为0事件就可不间断地运行了。结果恰恰相反,事件将一次也不运行。同时还要注意变量的声明。如:
  private sub timer1_timer()
  dim a as integer
  a = a + 1
  print a
  end sub
  
  dim a as integer
  private sub timer1_timer()
  a = a + 1
  print a
  end sub
  试试看,其结果是完全不同的。
  当需要用户输入时间时,为避免出现错误的时间,可以使用日历控件。它只允许用户在日历表中选择日期,避免了错误的发生。
  3、记录时间的api函数。
  gettickcount windows api函数可返回 windows 启动以来消失的毫秒数。其精度高于vb的timer 函数。且timer 函数会在午夜清零,而gettickcount 函数只有当机器连续使用49.7天后才返回零。这为我们编程提供了很大的方便。例如想知道你的电脑连续工作多久了,可新建一工程,然后添加以下代码:
  private declare function gettickcount lib “kernel32" () as long
  private sub form_load()
  dim d as date
  dim t as integer
  form1.show
  t = gettickcount / 1000
  d = timeserial(0, 0, t)
  print d
  end sub

P.S.:VB.net里date型是利用了类似于Pascal里Record和C里Struct的封装式存储,直接用DateVariableName.day/.month/.year等即可得到天数,月份,年份,结果为整数,而VB6里的Day(DateVariableName)函数将不可用。

求两日期差值的函数:

DateDiff 函数   

返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

语法

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函数语法中有下列命名参数:

部分                描述
interval            必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2        必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek      可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear     可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。



设置

interval 参数的设定值如下:

设置    描述
yyyy    年
q       季
m       月
y       一年的日数
d       日
w       一周的日数
ww      周
h       时
n       分钟
s       秒



firstdayofweek 参数的设定值如下:

常数          值   描述
vbUseSystem   0    使用 NLS API 设置。
vbSunday      1    星期日(缺省值)
vbMonday      2    星期一
vbTuesday     3    星期二
vbWednesday   4    星期三
vbThursday    5    星期四
vbFriday      6    星期五
vbSaturday    7    星期六




常数             值 描述
vbUseSystem      0   用 NLS API 设置。
vbFirstJan1      1   从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2   从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3   从第一个无跨年度的星期开始。



说明

DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。

为了计算 date1 与 date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1 与 date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。

如果 date1 比 date2 来得晚,则 DateDiff 函数的返回值为负数。

firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。

如果 date1 或 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 或 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 或 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值