`

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

 
阅读更多
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 分钟。
分享到:
评论

相关推荐

    教案ACCESSdate日期和时间函数.pdf

    在Microsoft Access中,日期和时间函数对于处理与日期和时间相关的数据至关重要。这些函数允许用户进行日期和时间的计算、比较以及格式化。以下是一些Access中常用的日期和时间函数的详细说明: 1. **Date函数**:...

    Access函数汇总.pdf

    29. FileDateTime函数:返回指定文件的日期和时间。 30. FileLen函数:返回指定文件的长度(字节数)。 31. Filter函数:根据指定条件返回字符串数组的子集。 32. Int和Fix函数:返回数的整数部分。 33. Format函数...

    ACCESS日期时间函数[文].pdf

    在Microsoft Access中,日期时间函数是处理和操作日期和时间数据的重要工具。这些函数使得数据库开发者和用户能够方便地进行日期计算、格式化以及转换。以下是对Access中一些关键日期时间函数的详细解释: 1. **...

    ACCESS函数详解

    在Microsoft Access中,函数是用于执行特定计算或操作的关键组件,它们可以帮助用户处理和分析数据库中的数据。"ACCESS函数详解"这个标题暗示我们将探讨Access中的一些主要函数类别及其用途。 1. **文本函数**:这...

    ACCESS高级操作函数大全

    - **日期/时间函数**:如`Date`返回当前日期,`Now`返回当前日期和时间,`DateAdd`增加或减少日期部分。 - **数学函数**:如`Abs`取绝对值,`Sqr`计算平方根,`Round`四舍五入。 - **查询函数**:如`Sum`、`...

    ACCESS函数大全

    在Microsoft Access中,函数是数据库管理系统中的重要组成部分,它们用于执行特定计算或操作,帮助用户处理数据、进行查询和分析。"ACCESS函数大全"可能是一个包含Access中所有可用函数的综合资源,对于开发者来说,...

    asp时间函数

    ASP时间函数是Access数据库管理系统中处理日期和时间的关键工具,它们允许开发者对日期和时间进行各种操作,如比较、计算和格式化。在Access中,日期和时间的处理与SQL Server有所不同,尤其在使用日期部分函数时。...

    Access-VBA函数大全

    处理日期和时间是数据库应用中常见的需求。 - `Date()`:返回当前系统日期。 - `Time()`:返回当前系统时间。 - `Now()`:返回当前系统日期和时间。 - `DateAdd()` 和 `DateDiff()`:添加或减去日期间隔。 ### 6. ...

    常用access函数集

    Access 函数集是 Microsoft Access 数据库管理系统中提供的一组函数集,用于处理日期、时间、算术、字符串、程序流程、SQL 合计等操作。下面是 Access 函数集的详细说明: 日期和时间函数 1. CDate:将字符串转换...

    Access DLC日期时间篇教程

    在Access DLC日期时间篇教程中,我们探讨了与日期和时间相关的各种操作和函数,这些在数据库管理和数据分析中非常常见。以下是一些重要的知识点: 1. **DateSerial函数**:这个函数用于创建一个新的日期,基于指定...

    SQLSERVER时间日期函数详解

    SQLSERVER 时间日期函数详解 SQL Server 提供了多种时间日期函数,帮助开发者快速处理日期和时间相关的操作。...这些时间日期函数可以在 SQL Server 中使用,也可以在 Access 和 ASP 中使用,使用方法类似。

    ACCESS时间查询.rar

    1. **日期/时间字段**:在Access数据库中,日期和时间数据类型用于存储日期和时间值。你可以创建包含日期/时间字段的表,以便记录事件的发生时间。 2. **筛选查询**:通过设置日期/时间条件,可以筛选出特定时间段...

    SQLServer时间日期函数详解.doc

    这些函数可以帮助开发人员在数据库查询和应用程序中执行各种日期和时间计算。以下是SQL Server中一些主要的时间日期函数的详细解释: 1. **GETDATE()**: 这个函数返回系统当前的日期和时间,格式为datetime类型。...

    access内置函数

    Access内置函数是数据库管理系统Microsoft Access中用于处理数据和操作数据的重要工具。这些函数分为多个类别,包括日期时间函数和文本字符串函数,可以帮助用户在查询、更新和分析数据时实现复杂的功能。 日期时间...

    ACCESSdate函数.pdf

    在Microsoft Access中,日期和时间函数对于处理与日期和时间相关的计算至关重要。这些函数使得开发者能够轻松地获取、设置和操作日期及时间数据。以下是Access中一些主要的日期时间函数的详细说明: 1. **Date函数*...

    ACCESS 函数运用

    6. **日期/时间函数**:`DATE`、`DATEVALUE`、`YEAR`、`MONTH`、`DAY`等用于处理日期和时间。例如,`SELECT DATE() - 30 AS 三十天前 FROM 表名`会显示当前日期减去30天的结果。 7. **逻辑函数**:`IIF`(If-Then-...

    教案ACCESS函数大全.pdf

    ACCESS数据库中提供了多种日期/时间函数,用于对日期和时间进行操作。 * `CDate`:将字符串转换为日期类型,例如`select CDate("2005/4/5")`。 * `Date`:返回当前日期。 * `DateAdd`:将指定日期加上某个日期,...

Global site tag (gtag.js) - Google Analytics