C# 如何将内部数字日期转换为Access日期/时间格式?

C# 如何将内部数字日期转换为Access日期/时间格式?,c#,ms-access,pick,C#,Ms Access,Pick,我从PICK/UniVerse数据库中获取一些数据,该数据库包含4或5个字符的数字格式的日期。这里有一些例子。。我从数据库中获取日期值,并将其与应用程序中显示的日期进行比较: 9832 12/1/1994 10027 6/14/1995 10594 1/1/1997 是否可以将这些转换为可以作为日期/时间值放入Access的内容 作为测试,我将9832作为通用格式放在Excel中,然后将其更改为短日期,显示为1926年12月1日。所以它正好缩短了68年。1002

我从PICK/UniVerse数据库中获取一些数据,该数据库包含4或5个字符的数字格式的日期。这里有一些例子。。我从数据库中获取日期值,并将其与应用程序中显示的日期进行比较:

9832       12/1/1994
10027      6/14/1995
10594      1/1/1997
是否可以将这些转换为可以作为日期/时间值放入Access的内容


作为测试,我将9832作为
通用
格式放在Excel中,然后将其更改为
短日期
,显示为1926年12月1日。所以它正好缩短了68年。10027和10594也是如此。

访问日期/时间值实际上是双精度浮点。整数部分表示一天,整数部分表示一天中的时间

看起来这些拾取日期编号与访问日期/时间值的日期部分直接对应。因此,您可以使用
CDate
来转换它们

?CDate(41481)
7/26/2013 
再多做一些实验来了解这一点:

?日期(
7/26/2013 
? CDbl(日期())
41481
注意,尽管您的问题带有c#标记,但您不需要它来进行这些转换。您可以通过访问查询执行这些操作,并要求db引擎应用这些功能

由于事实证明,这些日期数字始终偏移68年,因此您仍然可以在Access查询中进行转换

?日期添加(“yyyy”,68,CDate(9832))
12/1/1994 
? 日期添加(“yyyy”,68,CDate(10027))
6/14/1995 
? 日期添加(“yyyy”,68,CDate(10594))
1/1/1997 
或者

?CDate(9832+CLng(24837))
12/1/1994 
? CDate(10027+CLng(24837))
6/14/1995 
? CDate(10594+CLng(24837))
1/1/1997 

访问日期/时间值实际上是双精度浮点值。整数部分表示一天,整数部分表示一天中的时间

看起来这些拾取日期编号与访问日期/时间值的日期部分直接对应。因此,您可以使用
CDate
来转换它们

?CDate(41481)
7/26/2013 
再多做一些实验来了解这一点:

?日期(
7/26/2013 
? CDbl(日期())
41481
注意,尽管您的问题带有c#标记,但您不需要它来进行这些转换。您可以通过访问查询执行这些操作,并要求db引擎应用这些功能

由于事实证明,这些日期数字始终偏移68年,因此您仍然可以在Access查询中进行转换

?日期添加(“yyyy”,68,CDate(9832))
12/1/1994 
? 日期添加(“yyyy”,68,CDate(10027))
6/14/1995 
? 日期添加(“yyyy”,68,CDate(10594))
1/1/1997 
或者

?CDate(9832+CLng(24837))
12/1/1994 
? CDate(10027+CLng(24837))
6/14/1995 
? CDate(10594+CLng(24837))
1/1/1997 
在C语言中,您可以使用

返回与指定的OLE自动化日期等效的日期时间

这将给你:

dt = {26/07/2013 12:00:00 AM}
稍后,您可以在Access数据库中插入该日期。

在C中,您可以使用

返回与指定的OLE自动化日期等效的日期时间

这将给你:

dt = {26/07/2013 12:00:00 AM}

稍后,您可以在Access数据库中插入该日期。

此线程有点晚,但我将发布一些更详细的信息:Pick/multivalueDBMS将日期存储为日期为0=12/31/1967的整数。因此,当我在2014年1月16日写这篇文章时,内部提货日期是16818。如果您使用以下命令,您将获得神奇的数字24837:

DateTime.Parse("12/31/1967").Subtract( DateTime.FromOADate(0)).Days
因此,将其添加到您的选择日期以获得日期

如果您使用任何常用的MV DBMS库来提取数据(UniObjects、U2.NET、MV.NET…),则不需要像这样转换日期。典型的函数可能如下所示:

string date = OConv( record["PurchaseDate"], "d2/" ); // "01/16/14"
或者,与其提取内部DBMS格式的数据,不如从外部格式开始。请提供数据的DBMS开发人员为您执行此操作。他们很容易返回“date'd2/”,而不仅仅是“date”


如果您需要这方面的更多信息,请随时直接与我联系。

这篇文章有点晚了,但我会发布更多细节:Pick/multivaluedbms将日期存储为一个整数,日期为0=12/31/1967。因此,当我在2014年1月16日写这篇文章时,内部提货日期是16818。如果您使用以下命令,您将获得神奇的数字24837:

DateTime.Parse("12/31/1967").Subtract( DateTime.FromOADate(0)).Days
因此,将其添加到您的选择日期以获得日期

如果您使用任何常用的MV DBMS库来提取数据(UniObjects、U2.NET、MV.NET…),则不需要像这样转换日期。典型的函数可能如下所示:

string date = OConv( record["PurchaseDate"], "d2/" ); // "01/16/14"
或者,与其提取内部DBMS格式的数据,不如从外部格式开始。请提供数据的DBMS开发人员为您执行此操作。他们很容易返回“date'd2/”,而不仅仅是“date”


如果您需要这方面的更多信息,请随时直接与我联系。

所有多值数据库日期(包括UniVerse和UniData)均以1967年12月31日为基准日期。您可以通过多种方式将其解析为外部数据

最常用的方法-例如,如果使用SQL或内部数据库工具之一为与日期转换字段相关的字段创建数据字典条目,例如:

2位数年份的“D2” 四位数年份的“D4” 使用斜杠分隔符表示4位数年份的“D4/” “D4/E”表示带斜杠分隔符的4位数年份,与美国格式(MM/DD/YYYY)相比,明确采用欧洲格式(DD/MM/YYYY)

如果未给出明确的格式,则格式将默认为环境设置。还有其他格式选项,许多选项可以组合使用(如上所述)

如前所述,替代方法是使用公式调整原始日期。自1967年12月31日起的日期以天为单位-所有多值数据库的基础数据。

所有多值数据库d