Ms access MS Access:将单独的年、日和时间字段转换为日期/时间
我有一个由另一个程序创建的文本文件,该程序已导入MS Access 2003。 日期和时间字段分为3个单独的字段,我想创建一个日期/时间字段。以下是数据示例: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为单位的时间 如何创建具有相应日期/时间值的附加字段? 提前感谢。'************************
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^ ^布赖恩在那个场合抢先回答了我