Informix 和 .NET 的时间和日期时间格式

Posted

技术标签:

【中文标题】Informix 和 .NET 的时间和日期时间格式【英文标题】:Time and datetime format with Informix and .NET 【发布时间】:2011-06-22 14:57:22 【问题描述】:

我有一个表,其中包含starttime 字段。此字段类型为DateTime,我将其配置为(Hour to Minute) in Specials,因为我只想以这种格式存储时间。

例如:10:45

现在在我的代码中: 我有以下问题:

 prd.StartTime = DateTime.Parse(record[1]);//.ToString("H:m"));


After Tracing: `StartTime = 6/22/2011 10:45:00 AM`

当我在这个表中插入一条记录时,我得到以下异常:

IBM.Data.Informix.IfxException: ERROR [22008] [Informix .NET provider][Informix]
Non-numeric character in datetime or interval.

编辑: 当我为该字段启用default value 并尝试在没有starttime 的情况下插入,并选择我发现它的值是17:48,当我再次将Special 更改为Year 时,默认值是2011-06-22 17:48:00


EDIT2:

我将StartTime 属性设为string 而不是DateTime,并成功插入。以后会不会影响这个字段的有效性。

【问题讨论】:

我不认为这行代码是你的问题所在。您所做的只是将变量 startTime 设置为今天上午 10:45 的日期。您实际上是如何将数据插入数据库的? 是的,但是DateTime 类型的数据库中的这个字段。但是我在Special 功能中指定为(Hour To Minute)这部分。 你能说record[1]的值是多少吗? 然后我想把它存储为时间 因为如果我将它设为varchar 类型,如果我对其进行操作,它将被视为字符串,我会得到错误的数据。 【参考方案1】:
DateTime date = DateTime.Parse("10:45");

它对我有用,我认为你需要检查记录[1]中存储的值是什么

【讨论】:

【参考方案2】:

我认为这对你有帮助:

prd.StartTime = DateTime.Parse(record[1].ToString());

【讨论】:

【参考方案3】:

DateTime.Parse("10:45") 完全有效。但是,它将生成一个 DateTime 的实例,其中包含今天的日期以及您解析的时间。

但是您遇到的错误可能是由于您使用的数据库想要将日期存储为数字造成的。

【讨论】:

Informix数据库,该字段类型为DateTime,Special配置为Hour to Minute 问题是数据库几乎可以肯定在内部将日期存储为数字。在将其发送到数据库之前,您需要弄清楚需要将其转换为什么。阅读 Informix .Net Provider。 如果列是 DATETIME HOUR TO MINUTE,您必须(安排 C# 数据库接口)向服务器发送一个结构正确的 DATETIME HOUR TO MINUTE 结构,或者您必须安排一个格式正确的要发送的字符串。并且格式正确意味着"10:45" 没有任何额外的字符。我不确定你是怎么做到的——但这是你必须达到的结果。另一种方法是在 SQL 语句中使用EXTEND(?, HOUR TO MINUTE),其中您的完整时间戳值将被日期部分接受,而秒数将被“EXTEND”操作截断。

以上是关于Informix 和 .NET 的时间和日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Informix 日期时间按半小时、四分之一和小时四舍五入?

Informix:日期时间操作

Informix 日期时间选择标准(在运算符之间)

Informix - 两个日期之间

带有准备好的语句的 Informix 日期时间

两个日期时间之间的差异(以毫秒为单位)(Informix)