11

我有以下代码 -

DateTime timeStamp;

timeStamp = System.Convert.ToDateTime(y.InnerText);

y.InnerText在哪里11/03/2013 11:35:24

但是,这破坏了我的导入语句,因为数据库正在寻找格式-

2013-03-11 11:35:24

如何设置 DateTime 对象的格式?

4

6 回答 6

27

如何设置 DateTime 对象的格式?

你不能。DateTimevalues 没有格式,就像orint valuesdouble一样。当您想将它们转换为字符串/从字符串转换时,您可以其中指定任何格式信息。

相反,您应该使用参数化 SQL 并避免DateTime首先将值转换回字符串。这是一般的最佳实践——不要在 SQL 字符串中包含值;参数化 SQL 有很多好处:

  • 它避免了SQL 注入攻击
  • 它避免了像这样的转换问题
  • 它使您的代码(SQL)与您的数据(参数值)分开

建议Convert.ToDateTime您在解析时指定预期格式,而不是使用 . 例如:

timeStamp = DateTime.ParseExact(y.InnerText,
                                "dd/MM/yyyy HH:mm:ss",
                                CultureInfo.InvariantCulture);

基本上,我尝试应用的两条规则是:

  • 避免在不必要的地方执行任何转换。如果您确保每个系统都尽可能使用正确的数据类型,那么您通常根本不需要进行任何转换。
  • 如果您确实需要转换成字符串表示形式/从字符串表示形式转换,请非常明确地说明您想要使用/产生的表示形式。对于机器可读的值,通常应该使用不变的文化和可能的自定义日期/时间格式。对于人类可读的值,通常应该使用用户的文化和标准的日期/时间格式。
于 2013-03-14T11:09:24.923 回答
3

我用这一步

  1. 转换为日期时间。
  2. 使用ToString(); 功能

例子 :

 DateTime myDateTime = DateTime.Now;
 string myDateTimeString = myDateTime.ToString("yyyy-MM-dd hh:mm:ss");
于 2017-10-20T06:51:13.610 回答
2

如果您将日期时间传递给 sql 数据库,请尝试使用 yourdatetime.ToString("yyyy/MM/dd") 格式,这对您有用。

还有一件事,您可以为您的 Applicaton 文化添加日期时间格式。所以这将根据您的需要对待您的日期时间格式。

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);
        }
    }
}
于 2013-03-14T11:11:30.790 回答
1

基本上日期没有格式。如果数据库parameter/fieldDatetime type您应该可以作为 Date 类型传递。将日期作为字符串传递不是一个好主意。

但是,如果您必须处理这些事情,那么您最好none culture specific date format在参数化查询中将日期传递给(ISO8601 或 ISO)。否则,您可能会在不同的文化设置中遇到数据库服务器问题。

例如,对于 sql server,在 ISO8601 中传递日期时间是安全的(在转换中);

'yyyy-mm-ddThh:mi:ss.mmm' //(no spaces)
于 2013-03-14T11:14:45.657 回答
0

您可以使用 ToString 转换为 2013-03-11 11:35:24

 DateTime timeStamp;

 timeStamp = System.Convert.ToDateTime(y.InnerText).ToString("yyyy-MM-dd HH:mm:ss");
于 2013-03-14T11:11:16.703 回答
0

如果您只是覆盖 DateTime 对象的 ToString() 方法怎么办?难道你不能选择你想要的格式,每次使用它时,它都会按照你想要的方式格式化,而不会被它打扰。

这只是一个想法,所以我不知道是否有更好的解决方案。

然后,您可以使用属性年、月、日,按照您的意愿构建它。就像是:

public override ToString(){
   return this.Year + "-" + this.Month + "-" + this.Day;
}

问候

于 2015-04-16T14:10:40.163 回答