http://support.microsoft.com/kb/210604
由于日期/时间值以双精度数字的形式存储,因此当您尝试在表达式中操作日期/时间值时,可能会得到格式有误的结果。本文演示如何创建表达式和自定义函数来显示特定日期以及计算时间间隔。

Microsoft 提供的编程示例只用于演示目的,不附带任何明示或暗示的保证。这包括但不限于对适销性或特定用途适用性的暗示保证。本文假定您熟悉所演示的编程语言以及用于创建和调试过程的工具。Microsoft 的支持工程师可以帮助解释某个特定过程的功能,但是他们不会修改这些示例以提供额外的功能或构建过程以满足您的特殊需求。
回到顶端 | 提供反馈
更多信息
显示特定的日期
要显示特定的日期,可以使用“DateSerial()”函数操作日期的日、月和年部分。例如,您可以在文本框的“ControlSource”属性或“即时”窗口中使用下列表达式,以返回特定的日期:

当前月份:
DateSerial(Year(Date()), Month(Date()), 1)
下一个月:
DateSerial(Year(Date()), Month(Date()) + 1, 1)
当前月份的最后一天:
DateSerial(Year(Date()), Month(Date()) + 1, 0)
下一个月的最后一天:
DateSerial(Year(Date()), Month(Date()) + 2, 0)
上一个月的第一天:
DateSerial(Year(Date()), Month(Date())-1,1)
上一个月的最后一天:
DateSerial(Year(Date()), Month(Date()),0)
当前季度的第一天:
DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)
当前季度的最后一天:
DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 4, 0)
当前星期的第一天(假定星期日 = 第 1 天):
Date() - WeekDay(Date()) + 1
当前星期的最后一天:
Date() - WeekDay(Date()) + 7
当前星期的第一天(使用“选项”对话框中的设置):
Date() - WeekDay(Date(), 0) + 1
当前星期的最后一天:
Date() - WeekDay(Date(), 0) + 7

有关计算会计年度或会计月份的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
210249 如何在 Access 2000 中获取特定日期的会计年度或月份
警告:执行本示例中的步骤将会修改示例数据库 Northwind.mdb。您可能需要备份 Northwind.mdb 文件,并在该数据库的副本上执行这些步骤。

计算时间间隔
由于时间值是以 24 小时制的一部分存储的,因此当您尝试对大于 24 小时的时间数据进行加、减、乘或除运算时,可能会得到格式有误的结果。

例如,如果您尝试在 Visual Basic 中通过对值执行减法运算来求出两个日期之间经过的小时数,则可能会得到错误的数字。为演示此过程,请在“即时”窗口中键入以下代码(请注意:它将返回 0:00 值,而不是返回正确的值 53:00,单位为小时):

StartDate=#6/1/93 8:00AM#
EndDate=#6/3/93 1:00PM#
?Format(EndDate-StartDate,"hh:mm")

要解决因时间值大于 24 小时而导致的格式问题,您可以使用 Visual Basic 中的“Int()”和“CSng()”函数将计算的时间值分为不同的变量来表示天、小时、分钟和秒钟。例如,您可以在自定义函数中包括以下代码片断,以创建各个时间变量:

'-------------------------------------------------------------------
' This sample code separates a time interval into seven variables for
' the following values: days, hours, minutes, seconds, total time in
' hours, total time in minutes, and total time in seconds.
'
' The interval argument is flexible; it can be a single value, an
' expression, or a field reference.
'-------------------------------------------------------------------

Dim totalhours As Long, totalminutes As Long, totalseconds As Long
Dim days As Long, hours As Long, minutes As Long, seconds As Long
Dim interval As Variant

days = Int(CSng(interval))
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
totalseconds = Int(CSng(interval * 86400))
hours = totalhours Mod 24
minutes = totalminutes Mod 60
seconds = totalseconds Mod 60

您可以使用 totalhours、totalminutes 和 totalseconds 变量以单个时间单位的形式来显示时间值。利用 days、hours、minutes 和 seconds 变量,您可以将一个时间值分解为多个时间部分。要以不同的格式显示时间值,您可以按以下示例函数所示的方法将这些变量连接起来:

“GetElapsedDays()”函数计算两个日期/时间值之间经过的时间,并以天为单位显示结果。
“GetElapsedTime()”函数计算两个时间值之间经过的时间,并用天、小时、分钟和秒钟显示结果。
“GetTimeCardTotal()”函数对表中的时间值字段求和,并用小时和分钟显示总数。

GetElapsedDays() 示例函数
要创建“GetElapsedDays()”函数,请按照下列步骤操作:

打开示例数据库 Northwind.mdb。
创建一个模块,并在“声明”部分中键入下面一行内容(如果尚不存在此内容):

Option Explicit

键入以下函数:

Function GetElapsedDays (interval)
Dim days As Long

days = Int(CSng(interval))
GetElapsedDays = days & " Days "
End Function

要测试此函数,请基于 Orders 表新建一个查询。
在 QBE 网格中,请添加下列字段:

Field: ShippedDate
Show: True

Field: OrderDate
Show: True

Field: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate])
Show: True

运行该查询。请注意,“ElapsedTime”列显示的是 Orders 表中每个记录的“ShippedDate”字段和“OrderDate”字段之间的天数。

GetElapsedTime() 示例函数
要创建“GetElapsedTime()”函数,请按照下列步骤操作:

使用以下结构创建一个新表,然后将其另存为 TimeLog。

表:TimeLog
-----------------------
Field Name: StartTime
Data Type: Date/Time
Format: General Date

Field Name: EndTime
Data Type: Date/Time
Format: General Date

在“数据表”视图中查看 TimeLog 表,输入下列三个记录,然后关闭该表:

StartTime EndTime
--------------------------------------------
5/10/95 4:57:00 PM 5/15/95 2:38:00 AM
5/11/95 10:17:31 AM 5/24/95 6:05:00 PM
5/18/95 9:16:43 AM 5/19/95 5:03:00 PM

创建一个模块,然后在“声明”部分中键入下面一行内容:

Option Explicit

输入以下函数:

Function GetElapsedTime(interval)

Dim totalhours As Long, totalminutes As Long, totalseconds As _
Long
Dim days As Long, hours As Long, Minutes As Long, Seconds As Long

days = Int(CSng(interval))
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
totalseconds = Int(CSng(interval * 86400))
hours = totalhours Mod 24
Minutes = totalminutes Mod 60
Seconds = totalseconds Mod 60

GetElapsedTime = days & " Days " & hours & " Hours " & Minutes & _
" Minutes " & Seconds & " Seconds "

End Function

注意:您需要向“GetElapsedTime”函数传递日期和时间。
要测试此函数,请使用“自动创建报表向导”来基于“TimeLog”表创建一个新报表。
在“设计”视图中查看该报表。
向 TimeLog 表的详细信息部分添加未绑定的文本框,然后按以下方法设置其属性:

Textbox
---------------
Name: ElapsedTime
ControlSource: =GetElapsedTime([EndTime]-[StartTime])
Width: 3 inches

预览报表。请注意,每个记录都用天、小时、分钟和秒钟显示经过的总时间。

GetTimeCardTotal() 示例函数
要创建“GetTimeCardTotal()”函数,请按照下列步骤操作:

注意:本文中的示例代码使用 Microsoft 数据访问对象。为使此代码正常运行,您必须引用 Microsoft DAO 3.6 对象库。为此,请在 Visual Basic 编辑器中单击“工具”菜单上的“引用”,并确保已选中“Microsoft DAO 3.6 对象库”复选框。

使用以下结构创建一个新表,然后将其另存为 TimeCard。

表:TimeCard
-----------------------
Field Name: Daily Hours
Data Type: Date/Time
Format: Short Time

在“数据表”视图中查看 TimeCard 表,输入下列四个记录,然后关闭该表:

8:15
7:37
8:12
8:03

创建一个模块,并在“声明”部分中键入下面一行内容(如果尚不存在此内容):

Option Explicit

键入以下函数:

Function GetTimeCardTotal ()

Dim db As DAO.Database, rs As DAO.Recordset
Dim totalhours As Long, totalminutes As Long
Dim days As Long, hours As Long, minutes As Long
Dim interval As Variant, j As Integer

Set db = dbengine.workspaces(0).databases(0)
Set rs = db.OpenRecordset("timecard")
interval = #12:00:00 AM#
While Not rs.EOF
interval = interval + rs![Daily hours]
rs.MoveNext
Wend
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
hours = totalhours Mod 24
minutes = totalminutes Mod 60

GetTimeCardTotal = totalhours & " hours and " & minutes & " minutes"

End Function

要测试此函数,请在“即时”窗口中键入下面一行内容,然后按 Enter:

?GetTimeCardTotal()

请注意,“即时”窗口中将显示 32 小时 7 分钟。

Access 中用于计算和显示日期/时间值的函数相关推荐

  1. MySql计算两个日期时间的差函数

    第一种:TIMESTAMPDIFF函数,需要传入三个参数,第一个是比较的类型,可以比较FRAC_SECOND.SECOND. MINUTE. HOUR. DAY. WEEK. MONTH. QUART ...

  2. java8中计算2个日期时间之间相差多少月

    Java8 java8中计算2个日期时间之间相差多少月 方法一 (计算时不计算天) DateTimeFormatter sdf = DateTimeFormatter.ofPattern(" ...

  3. 【数据库】Mysql函数DATE_FORMAT() 显示日期/时间

    上一篇文章介绍了Mysql函数DATE_ADD(),这篇文章主要是为了解决上次遗留的问题: 把问题变得更复杂一点:假设有两个借款,其中一个借款1的到期还款日为2日,借款2的到期还款日为10日.这个字段 ...

  4. Python中用于计算对数的log()方法

    本文转载至:http://www.jb51.net/article/66130.htm 这篇文章主要介绍了Python中用于计算对数的log()方法,是Python入门基础中的必会的方法,需要的朋友可 ...

  5. DateEdit如果开启Vista模式并显示日期+时间模式

    DateEdit如果开启Vista模式并显示日期+时间模式 问题,以前没有涉及过,借机看一下,记录如下: 设置为Vista显示模式(如下图) 设置以下属性 dateEdit1.Properties.V ...

  6. android界面布局题,【填空题】Android 系统中, 用于定义布局显示在界面上的风格。...

    [填空题]Android 系统中, 用于定义布局显示在界面上的风格. 更多相关问题 [37]A.anotherB.each otherC.the otherD.one another Tabor ma ...

  7. executequery方法_【接口测试】soapui中数字、字符串、日期时间、数据库连接参数化的设置方法...

    先回顾下前几篇soapui工具操作文章: 在soapui里面使用groovy脚本生成测试报告的方法 在soapui里面用groovy传递cookie身份信息的方法 soapui中进行接口响应数据的关联 ...

  8. LaTeX去掉默认显示日期时间

    LaTeX默认情况下会显示日期时间,该时间是编译时的日期,有时候我们并不需要显示该日期,该怎么办呢? 方法: 使用\date关键字并将{}里的内容置空即可,即: \date{} 重新编译,这样就不显示 ...

  9. Linux 命令之 let -- bash 中用于计算的工具,用于执行一个或多个表达式

    文章目录 一.命令介绍 二.命令示例 自增操作 自减操作 shell 脚本中的运算表达式 一.命令介绍 let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ ...

最新文章

  1. UI设计培训之如何将设计理论与实践相结合
  2. 麻省理工学院计算机博士年薪,麻省理工学院计算机博士录取要求
  3. Java springcloud B2B2C o2o多用户商城 springcloud架构 (十七)上传文件
  4. ubifs linux,ubifs使用方法
  5. 彻底清除备份域服务器数据元的方法
  6. mysql sphfiks_使用sphinx索引mysql数据
  7. Linux内核学习之路_1_编译Linux内核
  8. 树形背包O(n * v^2)入门
  9. 信捷电子凸轮使用_1.电子凸轮入门应用之基础知识介绍
  10. 交换机和集线器的区别是什么?
  11. 2019你会被裁员吗?
  12. TFT-LCD 液晶显示
  13. 谁能和乔布斯比勤奋?乔布斯的睡眠时间
  14. 天津大学计算机软件技术基础试题答案,天津大学网络学院计算机软件技术基础-1试题b卷.doc...
  15. Charles 2 - breakpoint断点、compose编辑、rewrite重写、map映射重定向、repeat重发、throttling弱网测试
  16. Linux---systemctl命令
  17. EEPROM存储芯片24C02
  18. nokia 7 Android8,全面屏+原生安卓8.0:NOKIA 诺基亚 发布 Nokia 7 Plus 手机
  19. jyh.project
  20. 一文读懂Flex Ethernet(FlexE)技术

热门文章

  1. Redis数据类型及编码格式——介绍及String篇
  2. 这些现货黄金术语应该懂
  3. 【JS】charAt()、fromCharCode() 与 charCodeAt()介绍
  4. Mac电脑安装及终端命令使用mysql
  5. 深度报道 一个你所不知道的史玉柱
  6. LLDB(三):通用参数类型详解
  7. Spring AOP超详细解析
  8. 1.5 Web前端:常用CSS样式2:其它样式
  9. 无线蓝牙耳机哪款好?国产无线蓝牙耳机口碑排行榜
  10. 数据结构的四种逻辑结构(简单介绍)