如何优化以下方法,将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;
}
答案 0 :(得分:0)
您正在创建您尝试解决的问题。
DateTime
不带任何文化信息或特定格式。数据库中的日期和时间数据类型也不例外,例如SQL Server中的datetime
。
当您将其从DateTime
转换为string
时 - 就在您使用文化信息来应用格式时。然后,您尝试使用不同的文化以不同的格式解析字符串,并将其解析回DateTime
,同时它没有文化信息。
然后简单的答案是 - 不要这样做。
非常清楚 - 当您在SQL Management Studio,Visual Studio Debugger或您正在使用的任何环境中看到数据库的输出时 - 这不是DateTime
。这是string
的{{1}} 表示。无论您在哪里,都会在查看时应用当前的文化。它实际上并不存在于该格式的数据库中。
例如,在SQL Server中,DateTime
字段存储为8个字节。考虑:
datetime