更改日期格式
Posted
技术标签:
【中文标题】更改日期格式【英文标题】:Changing the format of date 【发布时间】:2011-06-05 11:41:18 【问题描述】:我有一个 DateTime 变量(比如时间戳),它以通常的格式保存日期,如下所示:
11/1/2011
此变量用于构建 SQL 命令。 Oracle 数据库只接受格式为
的日期YYYY-MM-DD
如何操作我的变量以这种格式存储日期?
【问题讨论】:
变量是DateTime
还是string
? DateTime
s 将日期“保存”为 64 位整数,而不是文本格式。
【参考方案1】:
根本不要格式化日期以将其包含在 SQL 中。
使用parameterized query,然后将值作为参数包含在内。这样一来,您根本不需要进行任何格式设置。
您应该对所有数据使用参数化查询 - 除了格式化之外,它还可以保护您免受 SQL 注入攻击。
获取适用于您现在使用的特定 Oracle 安装的日期/时间格式不是正确的解决方法。正确执行:避免在代码(SQL)中包含数据。
在另一件事上,您的问题是一开始就做出了错误的假设。 DateTime
变量根本不保存“通常格式”的值,就像 int
保存数字的十进制表示或十六进制表示一样。 DateTime
根本不在内部存储文本 - 它存储了许多刻度。当您拨打ToString
时,它的格式取决于各种文化方面。值得将类型表示的基本值的概念与您可能通过调用 ToString
获得的 格式化 字符串表示分开。
【讨论】:
谢谢。我将对此进行研究并尝试将其合并到我的代码中 +1 太棒了!这是迄今为止最聪明、最简单的方法。 Jon 的回答很好,但我认为值得指出可以传递给DateTime.ToString
的自定义格式的存在。这可能有助于消除 OP 遇到的困惑。
@Jason:如果这是最好的方法,我会这样做。这可能是目前 OP 可以“工作”代码的 最快 方式,但我不想通过在参数化更合适的解决方案时提供短期修复来鼓励不良做法查询。哦,已经有其他三个格式化答案,所以那里也不会增加太多:)
@Jon Skeet:好点。以后我自己回答问题时会牢记这个想法。【参考方案2】:
我假设您在 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");
【讨论】:
谢谢。这解决了我的问题。我知道这很容易解决,我最终会合并参数化查询。 Mikael 为 .Net 编写的“yyyy-MM-dd”等可用格式字符串记录在此处:msdn.microsoft.com/en-us/library/8kb3ddd4.aspx【参考方案3】:var dt = DateTime.Now;
var formatted = dt.ToString("yyyy-MM-dd");
【讨论】:
【参考方案4】:试试这个:
string oracleTimeFomatDate = DateTime.Now.ToString("yyyy-MM-dd")
【讨论】:
以上是关于更改日期格式的主要内容,如果未能解决你的问题,请参考以下文章