将DataSet中的DateTime列格式从US / UK转换为US

时间:2013-08-19 22:26:01

标签: c# datetime formatting

如何优化以下方法,将DataSet DateTime列从美国/英国格式转换为美国格式。初始日期格式可以是美国/英国或任何其他国家/地区。需要在输出数据集中将其转换为美国日期格式

private DataSet ModifyDateToUSFormat(DataSet ds)
    {
        DataSet dsRes = new DataSet();
        DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat;

        //Convert from DateTime to String Type
        DataTable dtCloned = ds.Tables[0].Clone();
        foreach (DataColumn dc in ds.Tables[0].Columns)
        {
            if (dc.DataType == typeof(DateTime))
                dtCloned.Columns[dc.ColumnName].DataType = typeof(string);
        }

        foreach (DataRow row in ds.Tables[0].Rows)
            dtCloned.ImportRow(row);

        //Change the String format to US format. Since Database expects US Format Only.
        foreach (DataRow row in dtCloned.Rows)
        {
            foreach (DataColumn dc in ds.Tables[0].Columns)
            {
                if (dc.DataType == typeof(DateTime))
                    row[dc.ColumnName] = DateTime.Parse(row[dc.ColumnName].ToString(), CultureInfo.CurrentCulture, DateTimeStyles.NoCurrentDateDefault).ToString(usDtfi.ShortDatePattern);
            }
        }

        dsRes.Tables.Add(dtCloned);
        return dsRes;
    }

1 个答案:

答案 0 :(得分:0)

您正在创建您尝试解决的问题。

DateTime不带任何文化信息或特定格式。数据库中的日期和时间数据类型也不例外,例如SQL Server中的datetime

当您将其从DateTime转换为string时 - 就在您使用文化信息来应用格式时。然后,您尝试使用不同的文化以不同的格式解析字符串,并将其解析回DateTime,同时它没有文化信息。

然后简单的答案是 - 不要这样做

非常清楚 - 当您在SQL Management Studio,Visual Studio Debugger或您正在使用的任何环境中看到数据库的输出时 - 这不是DateTime。这是string的{​​{1}} 表示。无论您在哪里,都会在查看时应用当前的文化。它实际上并不存在于该格式的数据库中。

例如,在SQL Server中,DateTime字段存储为8个字节。考虑:

datetime