【问题标题】:Convert Oracle Date to c# DateTime将 Oracle 日期转换为 c# 日期时间
【发布时间】:2013-05-16 19:50:49
【问题描述】:

我正在尝试从 Oracle 数据库中读取 Date 类型的记录,然后将其转换为 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 solution 并使用 DateTime.ParseExact

标签: c# date datetime


【解决方案1】:

其他人都把它复杂化了。

Oracle Managed Data Access(我假设您正在使用)将日期返回为“OracleDate”类型。 OracleDate 有一个属性“Value”,它是一个 c# DateTime。

在我的例子中,为了从 out 参数(下面的 p2)获取 DateTime,我使用了

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

对于有问题的日期在返回数据集的一行中的 Op 的情况,使用

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

编辑:如果从 DataRow 获取数据,由于某种原因,日期实际上是 c# DateTime

【讨论】:

  • 我来到这里寻求帮助,从 OracleCommand.ExecuteScalar() 返回的日期获取 C# DateTime。你为我指明了正确的方向。谢谢!我的代码最终是这样的: DateTime OriginalEntryDate = ((OracleDate)cmd.ExecuteScalar()).Value;
【解决方案2】:

这个:

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

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

【讨论】:

    【解决方案3】:

    你有什么理由不能只使用DateTime.Parse()?接受数据库值似乎给出了正确的输出(包括时间,这似乎是你所追求的)

    【讨论】:

    • DateTime.Parse() 取决于文化,因此它可以为您和@Bagzli 产生不同的结果
    【解决方案4】:
    DateTime dt = ds.Tables[0].AsEnumerable().First().Field<DateTime>(0);
    

    应该做的工作

    【讨论】:

      【解决方案5】:

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

      我试了成功。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 2011-05-30
        • 2016-06-07
        • 1970-01-01
        • 2016-02-28
        相关资源
        最近更新 更多