我有以下代码-
DateTime timeStamp;
timeStamp = System.Convert.ToDateTime(y.InnerText);
式中y.InnerText
为11/03/2013 11:35:24
。
但是这会破坏我的import语句,因为如果数据库正在查找格式-
2013-03-11 11:35:24
如何设置DateTime对象的格式?
如何设置DateTime对象的格式?
你不能。DateTime
值没有格式,int
和double
值也没有格式。当你想要将它们转换为字符串时,就是,在这里你可以指定任何格式化信息。
相反,您应该使用参数化的SQL,并首先避免将DateTime
值转换回字符串。这是一个通用的最佳实践-不要在SQL字符串中包含值;参数化SQL有很多好处:
- 避免SQL注入攻击
- 它避免了像这样的转换问题 它保持你的代码(SQL)从你的数据(参数值)分开
我将也建议在解析时指定您期望的格式,而不是使用Convert.ToDateTime
。例如:
timeStamp = DateTime.ParseExact(y.InnerText,
"dd/MM/yyyy HH:mm:ss",
CultureInfo.InvariantCulture);
基本上,我尝试应用的两条规则是:
- 避免执行任何不需要的转换。如果您确保每个系统尽可能使用正确的数据类型,您通常根本不需要进行任何转换。
- 当需要转换为/从字符串表示时,要非常明确地说明要消费/产生的表示。对于机器可读的值,通常应该使用不变区域性和可能的自定义日期/时间格式。对于人类可读的值,通常应该使用用户的文化和标准日期/时间格式。
我使用这个步骤
- 转换为日期时间 使用ToString();函数
例子:
DateTime myDateTime = DateTime.Now;
string myDateTimeString = myDateTime.ToString("yyyy-MM-dd hh:mm:ss");
如果您正在传递日期时间给sql数据库,请尝试使用yourdatetime.ToString("yyyy/MM/dd")格式,这将为您工作。
还有一件事,您可以为应用程序区域性添加日期时间格式。因此,这将处理您想要的日期时间格式。
using System;
using System.Globalization;
using System.Threading;
namespace test {
public static class Program {
public static void Main() {
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd HH:mm:ss";
culture.DateTimeFormat.LongTimePattern = "";
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(DateTime.Now);
}
}
}
基本上Date没有格式。如果数据库parameter/field
是Datetime type
,您应该可以作为Date类型传递。将date作为字符串传递不是一个好主意。
然而,如果您必须处理某些事情,那么您最好在参数化查询中传递 none culture specific date format
(ISO8601或ISO)中的Date。否则,不同区域性设置中的数据库服务器可能会出现问题。
例如,对于sql server,将ISO8601中的日期时间传递为;
是安全的(在转换中)。'yyyy-mm-ddThh:mi:ss.mmm' //(no spaces)
您可以使用ToString转换为2013-03-11 11:35:24
DateTime timeStamp;
timeStamp = System.Convert.ToDateTime(y.InnerText).ToString("yyyy-MM-dd HH:mm:ss");
如果你只是重写你的DateTime对象的ToString()方法呢?难道你不能选择你想要的格式,每次使用它时,它将按照你想要的方式格式化,而不会被它打扰吗?
这只是一个想法,所以我不知道是否有更好的解决方案。
然后你可以使用属性year, month, day,来创建你想要的。比如:
public override ToString(){
return this.Year + "-" + this.Month + "-" + this.Day;
}
问候