Ms access MS Access:将单独的年、日和时间字段转换为日期/时间

Ms access MS Access:将单独的年、日和时间字段转换为日期/时间,ms-access,datetime,Ms Access,Datetime,我有一个由另一个程序创建的文本文件,该程序已导入MS Access 2003。 日期和时间字段分为3个单独的字段,我想创建一个日期/时间字段。以下是数据示例: YEAR,DAY_NUMBER,TIME 2002,231,223405 2004,117,000000 年份:YYYY格式的年份 日期:一年中的某一天。e、 g.001代表1月1日;034将是2月3日 时间:以hhmms为单位的时间 如何创建具有相应日期/时间值的附加字段? 提前感谢。'************************

我有一个由另一个程序创建的文本文件,该程序已导入MS Access 2003。 日期和时间字段分为3个单独的字段,我想创建一个日期/时间字段。以下是数据示例:

YEAR,DAY_NUMBER,TIME
2002,231,223405
2004,117,000000
年份:YYYY格式的年份

日期:一年中的某一天。e、 g.001代表1月1日;034将是2月3日

时间:以hhmms为单位的时间

如何创建具有相应日期/时间值的附加字段? 提前感谢。

'*********************************************************************
' *********************************************************************
' FUNCTION: CJulian2Date()
'
' PURPOSE: Convert a Julian day to a date. The function works with
'          dates based on the Gregorian (modern) calendar.
'
' ARGUMENTS:
'    JulDay: The ordinal day of a year. Between 1 and 365 for all
'            years, or between 1 and 366 for leap years.
'
'    YYYY: A three or four digit integer for a year that is within the
'          range of valid Microsoft Access dates. If YYYY is omitted,
'          then YYYY is assumed to be the year of the current system
'          date.
'
' RETURNS: A date for a valid Microsoft Access year and Julian day,
'          or a Null value for an invalid Julian Day.
' *********************************************************************

Function CJulian2Date (JulDay As Integer, Optional YYYY)
    If IsMissing(YYYY) Then YYYY = Year(Date)
    If Not IsNumeric(YYYY) Or YYYY \ 1 <> YYYY Or YYYY < 100 Or YYYY _
      > 9999 Then Exit Function
    If JulDay > 0 And JulDay < 366 Or JulDay = 366 And _
      YYYY Mod 4 = 0 And YYYY Mod 100 <> 0 Or YYYY Mod 400 = 0 Then _
        CJulian2Date = Format(DateSerial(YYYY, 1, JulDay), "m/d/yyyy")
End Function
'函数:CJulian2Date() ' '目的:将儒略日转换为日期。该函数与 基于公历(现代)的日期。 ' "论据: 七月日:一年中的第几天。在1到365之间 “年,或者闰年在1到366之间。 ' 'YYYY:一年的三位或四位整数,在 '有效Microsoft Access日期的范围。如果省略YYYY, '则假定YYYY是当前系统的年份 “日期。 ' '返回:有效Microsoft Access年份和朱利安日的日期, '或无效朱利安日的空值。 ' ********************************************************************* 函数CJulian2Date(JulDay为整数,可选YYYY) 如果IsMissing(YYYY),则YYYY=年(日期) 如果不是数字(YYYY)或YYYY\1 YYYY或YYYY<100或YYYY_ >9999然后退出功能 如果JulDay>0且JulDay<366或JulDay=366且_ YYYY Mod 4=0和YYYY Mod 100 0或YYYY Mod 400=0,然后_ CJulian2Date=格式(日期序列(YYYY,1,JulDay),“m/d/YYYY”) 端函数

来源:

取年份并转换为当年的1月1日。添加天数并转换为日期格式。您可以将其放入查询中

计算日期:计算日期(CLng(计算日期(“01/01/”&[年])+[天]-1)


本例假设您的表名为
MyTable
,其
YEAR
DAY\u NUMBER
字段均为数字数据类型,
TIME
字段为文本,并且您添加了名为
Date\u TIME
的日期/时间字段

使用
DateSerial()
TimeSerial()
函数尝试更新查询

UPDATE MyTable
SET date_time = DateSerial([YEAR],1,DAY_NUMBER)
    + TimeSerial(Left([TIME],2), Mid([TIME],3,2), Right([TIME],2));
编辑:如果我误解了您的意图,并且您实际上不需要或不想存储日期/时间值,您可以在需要时通过
选择
查询来派生它

SELECT
    DateSerial([YEAR],1,DAY_NUMBER)
        + TimeSerial(Left([TIME],2), Mid([TIME],3,2), Right([TIME],2))
        AS date_time
FROM MyTable;

我不明白你为什么用
CDate()
两次和
CLng()
而不是
CDate(“01/01/”&[YEAR])+[DAY\u NUMBER]-1
@HansUp-我正在构建这一部分并进行测试,但我忘记了整数将被视为天,可以添加到日期中,并且仍然可以访问日期。CLng()有助于知道我得到了天数。+1我不知道你可以用1表示月份,然后在日部分使用>31。这就是天才马特唐南最近在另一个问题中,你和布赖恩·卡米尔激励我重新审视
DateSerial()
。我很想看看它对假约会做了什么<代码>日期序列(2012,2,31)。。。看起来它的回答可能有用。:-)@当然,这是我将来不会忘记的。出于好奇,这是哪个问题。。。如果你还记得怎么找到它的话,哈哈?@mattdonan@HansUp^ ^布赖恩在那个场合抢先回答了我