【问题标题】:DB2 C# Date ConversionDB2 C# 日期转换
【发布时间】:2021-03-10 12:10:57
【问题描述】:

我正在将大约 60 个数据表从 DB2 迁移到 SQL Server。 我遇到的问题是 DB2 表中的日期(我使用它很轻)字段。 这些表格中包含大约 15 年的数据。在那段时间 已在数据类型字段或字符串 (Char) 中存储在大多数表中的日期 类型字段。其中一些表包含超过 100 万条记录。

此外,日期已以各种格式存储

这里有一些。

23.06.2005
06.23.2005
2005.06.23
23.06.05
06.23.05

23/06/2005
06/23/2005
2005/06/23
23/06/05
06/23/05

23-06-2005
06-23-2005
2005-06-23
23-06-05
06-23-05

当 DB2 字段是数据类型字段时,我没有问题。

DateTime dt = DateTime.Parse(dsSourceData[j].ToString(), new CultureInfo("en-CA"));

但是,当 DB2 字段是 String 类型时,我确实遇到了问题。上述转换 失败。

有谁知道我可以如何克服这个问题?

我将不胜感激并提供帮助

亲切的问候

伊恩

【问题讨论】:

  • 我上面显示的示例是我在表格中的格式。DB2 类型字段是 L(日期类型)或字符。日期类型字段没有出现问题。给我一个问题的是 Char/String 类型。使用 .Substring() 几乎是不可能的

标签: c# date


【解决方案1】:

不可能提供有效的解决方案,因为您有两种相互矛盾的格式,其中日期和月份处于互换位置:“23.06.05”和“06.23.05”。那么这个日期是什么意思:"07.08.09"

但是,通常你使用DateTime.TryParseExact 和多个格式字符串:

string[] formats={"dd.MM.yyyy", "yyyy.MM.dd", "dd.MM.yy"}; // to be continued
CultureInfo culture = new CultureInfo("en-CA");
var validDates = dateStrings
    .Select(s => (valid:DateTime.TryParseExact(s, formats, culture, DateTimeStyles.None, out var dt),date:dt))
    .Where(x => x.valid)
    .Select(x => x.date)
    .ToArray();

阅读:Custom date and time format strings

【讨论】:

  • “不可能提供可行的解决方案...” - 如果有进一步的信息可用于确定,则可能提供解决方案或部分解决方案使用哪种日期样式。例如,可能会发现特定用户或团队(经过仔细分析)具有一致的风格,或者不同的表格可能有不同的约定(他提到 60 个表格),或者可能会发现不同的约定适用于不同的时代,或者可能是系统中可用的其他数据,可以从中得出推论。 (1/2)
  • 另外,少量的错误也可能与统计无关,或者可以通过对明确日期的相对频率的统计分析以及相应的模糊日期的权重来充分纠正。例如,只有不超过 12 的天数与月份有歧义,因此可以从涉及天数 13-31 的明确日期的存在推断出每种日期格式的相对流行度。还可以分析每个可能日期所在的星期几。凭借 15 年的数据,无论如何,这很可能是一项统计工作。 (2/2)
  • 非常感谢蒂姆的回复。它给了我很多思考和一些好的建议。我正在查找字段数据类型并尝试以这种方式处理它。我可以区别对待 Date 和 Char 类型。
  • 我已经放弃并在 AS400 上创建了一个程序,将所有文件中的数据格式修改为单一格式。不能被所有的花言巧语所困扰
  • 非常感谢您的帮助。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多