我有一个DateTime变量(比方说,timestamp),它以通常的格式保存日期,如下所示:
11/1/2011
此变量用于构建SQL命令。 Oracle数据库仅接受格式为
的日期YYYY-MM-DD
如何操作变量以此格式存储日期?
答案 0 :(得分:8)
请勿格式化日期以将其包含在SQL中。
使用parameterized query,然后只需将值作为参数包含在内。这样你根本不需要任何格式化。
您应该对所有数据使用参数化查询 - 除格式化外,它还可以保护您免受SQL注入攻击。
获取适用于您正在使用的特定Oracle安装的日期/时间格式是不正确的修复。做得恰当:避免在代码中包含数据(SQL)。
另一方面,你的问题是从一开始就做出错误的假设。 DateTime
变量根本不以“通常格式”保存值,只有int
包含十进制表示或数字的十六进制表示。 DateTime
根本不在内部存储文本 - 它存储了许多刻度。致电ToString
时如何格式化取决于各种文化方面。值得将类型表示的基本值的概念与您可能碰巧通过调用ToString
获得的格式化的字符串表示分开。
答案 1 :(得分:4)
我假设您在SQL命令中将日期作为字符串发送。
DateTime date = ...your object...;
string formattedDate = date.ToString("yyyy-MM-dd");
如果是字符串格式,则需要先解析它。如果是日/月/年或月/日/年,很难从字符串中看到。
但你可以这样做:
string sDateTime = "11/1/2011";
DateTimeFormatInfo format = new DateTimeFormatInfo();
format.ShortDatePattern = "dd/MM/yyyy"; // or MM/dd/yyyy
DateTime date = DateTime.Parse(sDateTime, format);
string formattedDate = date.ToString("yyyy-MM-dd");
答案 2 :(得分:1)
var dt = DateTime.Now;
var formatted = dt.ToString("yyyy-MM-dd");
答案 3 :(得分:1)
试试这个:
string oracleTimeFomatDate = DateTime.Now.ToString("yyyy-MM-dd")