将Oracle日期转换为C# DateTime

7

我正在尝试从 Oracle 数据库中读取一个日期类型的记录,然后将其转换为 ASP.NET C# DateTime 对象。问题是它只取出了日期而没有时间。我使用的命令是:

DateTime dt = Convert.ToDateTime(ds.Tables[0].Rows[0][0].ToString());

如果我尝试打印ds.Tables[0].Rows[0][0].ToString(),它会显示时间。 有人知道如何解决这个问题吗?
我的Oracle日期字段的值/格式为:2013-01-01 14:14:14

你可以查看这个SO解决方案,并使用DateTime.ParseExact。 - rs.
5个回答

8

其他人都把它搞得太复杂了。

Oracle Managed Data Access(我假设你正在使用)返回日期类型为“OracleDate”。 OracleDate具有名为“Value”的属性,该属性是C# DateTime。

在我的情况下,要从输出参数(如下面的p2)获取DateTime,我使用了

return ((OracleDate) p2.Value).Value;

对于Op的情况,其中所涉及的日期在返回的数据集的一行中,请使用以下方法:

DateTime dt = (DateTime) ds.Tables[0].Rows[0][0];

编辑:如果从 DataRow 中获取数据,则日期实际上将是一个 C# DateTime 对象。

1
我来到这里是为了寻求帮助,从OracleCommand.ExecuteScalar()返回的日期中获取C# DateTime。你指引了我正确的方向。谢谢!我的代码最终变成了这样:DateTime OriginalEntryDate = ((OracleDate)cmd.ExecuteScalar()).Value; - Joe Gayetty

2
这是:

DateTime dateTime = DateTime.ParseExact(ds.Tables[0].Rows[0][0].ToString(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

使用指定格式进行解析,不依赖于线程文化。


1

你为什么不能直接使用 DateTime.Parse()?使用数据库的值似乎可以得到正确的输出(包括时间,这似乎是你想要的)

enter image description here


1
DateTime.Parse() 是与文化相关的,因此它可能会为您和 @Bagzli 产生不同的结果。 - Alexander Bortnik

0
DateTime dt = ds.Tables[0].AsEnumerable().First().Field<DateTime>(0);

应该可以完成任务


0

DateTime dt = DateTime.Parse(dataSet.Tables[0].Rows[0]["mydate"].ToString());

我已经成功尝试了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接