我正在尝试将日期插入从excel电子表格导入的oracle数据库中。在电子表格的某些行中,日期以24小时格式表示,而在某些行中则以AM / PM格式表示。
我开始使用TO_DATE函数作为
将日期字符串转换为oracle格式"TO_DATE(\'" + Timestamp + "\', 'MM/DD/YYYY HH:MI:SS AM', 'nls_date_language=american')"
此处的“时间戳记”是一个C#字符串变量,其日期为字符串格式。
当timestamp变量以24小时格式表示时,出现异常。有什么方法可以使我的C#代码接受两种日期格式并按原样插入到oracle表中?
答案 0 :(得分:2)
您可以通过以下两种方式进行操作:
C#(如上所述)
DateTime.ParseExact
有一个overload,可让您传递多种格式的字符串。它将使用第一个有效的。 DateTime.TryParseExact
也有此重载。 DateTime.Parse
不会。
string[] formats = {"dd/MM/yyyy HH:mm:ss", "dd/MM/yyyy hh:mm:ss tt"};
DateTime Timestamp = DateTime.ParseExact(inputDate, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
Oracle
让Oracle检查AM或PM并相应地调整格式字符串。这是原始的Oracle;我将字符串构建留给您:
TO_DATE(val,
CASE WHEN REGEXP_LIKE(val, '(AM|PM)')
THEN 'MM/DD/YYYY HH:MI:SS AM'
ELSE 'MM/DD/YYYY HH24:MI:SS'
END)
任何代码问题都让我知道。我不在可以测试这些代码片段的机器上。