0

我发现了一个关于堆栈溢出的类似问题,但它并没有真正回答我的问题。我需要确保我的 asp.net 应用程序将日期 dd/mm/yyyy 格式化为与我的 SQL Server 2005 相同。

如何验证服务器的日期文化(如果是这样的话)是否与我对应用程序的编程方式相匹配?是否有特定的数据库设置和操作系统设置?它是特定于表的吗?我不想改变我的日子和月份。

谢谢你

4

5 回答 5

6

当您从数据库中获取 DateTime 时,它​​应该采用非培养格式(如 DateTime 对象,基于自某个日期以来的滴答数)。只有当您将该值转换为字符串时,您才需要关注文化。在这些情况下,您可以使用 yourDateTimeValue.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture) 来确保信息正确显示。

于 2008-09-23T21:49:12.630 回答
2

我相信如果您使用 SqlParameters,ADO.NET 会处理剩下的事情,您不必担心。此外,它对防御 SQL 注入攻击也有好处!:)

于 2008-09-23T22:06:09.407 回答
0

** 请注意,因为 SQL DateTime 列不可为空,其最小值为 1/1/1753,而 .net DateTimes 不可为空,最小值为 1/1/0001。**

如果您从真实的 DateTime 列中提取数据,默认情况下它将始终采用相同的标准格式。要将数据保存到列中,您可能需要在参数中指定 SqlDbType.DateTime。

我从http://bytes.com/forum/thread767920.html撕掉了这个:

com.Parameters.Add("@adate", SqlDbType.DateTime).Value = DateTime.Now;

于 2008-09-23T21:49:30.930 回答
0

好吧,如果您将日期时间字段保留在数据库中,则不必担心。

只要您将应用程序中的日期保持为强类型(DateTime 变量)并通过带有 DBParameter/SqlParameter 的准备好的语句发送日期,您的数据库就会按原样使用它们。

如果您在代码中使用字符串来保存日期,一些强制转换将确保您发送正确的值:

string sqlCmd = @"SELECT *
   FROM MyTable
   WHERE MyDateField = CONVERT(datetime, '{0}', 101)";

// assuming myDateString is a string with a date in the local format
sqlCmd = string.Format(sqlCmd,
    Convert.ToDateTime(myDateString).ToString("yyyyMMdd"));

(代码很丑,但希望它能够理解)

于 2008-09-23T22:02:51.317 回答
0

正如其他人所提到的,就文化上存储日期时间而言,您应该没问题。我建议您将所有时间存储为标准 UTC 时间。在 SQL Server 2005 及更早的版本中,无法存储时区信息,但如果所有内容都以通用时间存储,则应该没问题,因为稍后可以将时间转换为本地时间。

SQL Server 2008 确实有一些知道时区的数据类型,如果您使用的是 .NET 3.5,则有一些工具可以帮助处理/转换时区。

绝对以通用格式保存时间。如果您必须在多个时区工作,这将改变世界。

于 2008-10-20T20:27:26.957 回答