在Oracle中插入日期时交换年份和世纪 [英] Year and century being swapped when inserting a date into Oracle

查看:185
本文介绍了在Oracle中插入日期时交换年份和世纪的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Oracle 11g中有下表:



I have the following table in Oracle 11g:

create table tb_dates ( dt_date date )





C#4.5中的以下代码:





And the following code in C# 4.5:

DataTable dt = new DataTable();
DataColumn dc = new DataColumn();
dc.DataType = Type.GetType("System.DateTime");
dc.ColumnName = "dt_date";
dt.Columns.Add(dc);
for (int i = 0; i < 5; i++)
{
    DataRow dr = dt.NewRow();
    dr["dt_date"] = System.DateTime.Now;
    dt.Rows.Add(dr);
}

using (OracleBulkCopy bulkCopy = new OracleBulkCopy("data source=orcl;user id=scott;password=tiger", OracleBulkCopyOptions.Default))
{
    bulkCopy.DestinationTableName = "tb_dates";
    bulkCopy.WriteToServer(dt);
}





表中的日期必须为 2014/05/15 。但是,当我在Oracle中选择时,我有 1420/05/15 。这一年已经逆转。



我正在使用Oracle 11g和Oracle ODP.NET 12客户端。我必须为此代码正常工作吗?



The dates in the table must be 2014/05/15. But, when I do the select in Oracle, I have 1420/05/15. The year has been reversed.

I'm using Oracle 11g and the Oracle ODP.NET 12 client. What I have to do for this code work correctly?

推荐答案

也有问题。

你可以简单地改变代码中的一半。

have problem also.
you can simply change halves of year in code.
foreach (DataColumn dc in dataTable.Columns)
{
    if (dc.DataType == typeof(DateTime))
    {
        foreach (DataRow dr in dataTable.Rows)
        {
            object value = dr[dc];
            if (!Convert.IsDBNull(value))
            {
                DateTime d = (DateTime)dr[dc];
                int year;
                int century = Math.DivRem(d.Year, 100, out year);
                dr[dc] = new DateTime(year * 100 + century, d.Month, d.Day);
            }
        }
    }
}


这篇关于在Oracle中插入日期时交换年份和世纪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆