设置日期时间格式

11

我有以下代码 -

DateTime timeStamp;

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

y.InnerText11/03/2013 11:35:24

然而,由于数据库正在寻找格式,这将破坏我的导入语句 -

2013-03-11 11:35:24

我该如何设置DateTime对象的格式?


1
你的数据库列是什么数据类型?如果是 DateTime,那么我猜你正在使用字符串拼接来创建查询。请使用参数化查询。 - Habib
DateTime 不关注格式,只有在转换为字符串时才会本地化。 - Lloyd
如果数据库的参数/字段日期时间类型,那么你应该没问题。将日期作为字符串传递不是一个好主意。基本上,日期没有格式。 - Kaf
6个回答

28
我该如何设置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);

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

  • 避免在没有必要的情况下执行任何转换。如果确保每个系统尽可能使用正确的数据类型,则通常根本不需要进行任何转换。
  • 在需要转换为/从字符串表示形式时,对你想要消耗/生成的表示形式非常明确。对于可机器读取的值,通常应使用不变区域性和可能的自定义日期/时间格式。对于可阅读的值,通常应使用用户的区域性和标准日期/时间格式。

3

我使用以下步骤:

  1. 转换为DateTime类型。
  2. 使用 ToString(); 函数。

示例:

 DateTime myDateTime = DateTime.Now;
 string myDateTimeString = myDateTime.ToString("yyyy-MM-dd hh:mm:ss");

2
月份为 MM - Madivad
只需要进行一个小的更正!应该按照以下格式进行编排:myDateTime.ToString("yyyy/MM/dd hh:mm:ss"); 或者 myDateTime.ToString("yyyy/MM/dd); 因为 mm 代表分钟,而月份应该使用 MM。 - gyousefi

2

如果您想将日期时间传递到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);
        }
    }
}

1
基本上,日期没有格式。如果数据库参数/字段是Datetime类型,您应该可以将其作为Date类型传递。将日期作为字符串传递不是一个好主意。
然而,如果你必须处理这个问题,那么最好在参数化查询中以非特定文化的日期格式(ISO8601或ISO)传递日期。否则,您可能会遇到不同文化设置的数据库服务器问题。
例如,对于SQL Server,在ISO8601中传递日期时间是安全的(在转换中);
'yyyy-mm-ddThh:mi:ss.mmm' //(no spaces)

0

如果您覆盖DateTime对象的ToString()方法会怎么样呢?那么您不就能选择您想要的格式,每次使用时都可以按照您想要的方式进行格式化而不会受到干扰。

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

然后,您可以使用属性年份、月份和日期来构建它,例如:

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

问候


就像这样,您的DateTime对象没有“格式”,但是您只需说明它应该如何执行其ToString方法。 - Spasal

0

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

 DateTime timeStamp;

 timeStamp = System.Convert.ToDateTime(y.InnerText).ToString("yyyy-MM-dd HH:mm:ss");

你是如何将字符串转换为DateTime的? - Nuno Ribeiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接