【问题标题】:DateTime Asp.NET日期时间 Asp.NET
【发布时间】:2014-02-23 14:40:40
【问题描述】:

我正在尝试使用 ASP.NET 在数据库中保存日期。数据库中 Date 的数据类型为datetime。 我想将其保存为例如 (23/02/2014 00:00:00)

也就是说,我想保存日期、月份和年份,然后让时间始终为 00:00:00。我也想在月份和/或日期之前只有一个数字时有零。例如2014 年 2 月 6 日而不是 2014 年 2 月 6 日。

当数据类型为varchar 时这是可能的,但是当数据类型为datetime 时我该怎么做呢?

【问题讨论】:

  • 你有什么问题?任何错误等
  • 我无法理解你的问题。你可以用 varchar 做什么,但不能用日期,将时间保存为零?
  • 在数据库中保存日期时,您不是在保存格式字符串,而是在保存日期。数据的消费者在读取数据时对其进行格式化...
  • 为什么数据库中的格式很重要? DateTime 是一个日期时间,它在数据库中的外观不会改变这一点......您可以稍后随意格式化。但是,您可能会遇到问题的一种方法是,如果您尝试在需要 DD/MM/YYYY 等时插入 MM/DD/YYYY。
  • @MikeSmithDev:在使用 C# 时,您不妨直接向 SqlCommand 发送 DateTime 实例(如果使用参数),这不会有问题。

标签: asp.net datetime datetime-format


【解决方案1】:
dateTime.ToString("dd/MM/yyyy");

将时间设置为零。 如果需要,MM 和 dd 将加零

如果你添加这个,SQL 会知道正确的日期:

DateTime.Now.ToString("dd/MM/yyyy",System.Globalization.CultureInfo.GetCultureInfo("he-IL"));

更新

System.Globalization.CultureInfo info = CultureInfo.CurrentCulture;
          Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("he-IL");

            command.Parameters.AddWithValue("@info",DateTime.Now);
          Thread.CurrentThread.CurrentCulture = info;

【讨论】:

  • 它没有 DateTime.ToString,只有 DateTime.Now.ToString,但是我有 'DateTime.Now.ToString("dd/MM/yyyy 00:00:00");'它给了我这样的错误“算术溢出错误将表达式转换为数据类型 datetime”,因为数据库中的数据类型是 datetype 而不是 varchar。我需要它是数据类型
  • 您需要在将日期添加到参数 System.Globalization.CultureInfo.GetCultureInfo("he-IL")) 到当前的日期之前进行设置,并在完成后将当前设置回原始文化
  • 我试过了,仍然显示“将表达式转换为数据类型日期时间的算术溢出错误”。 ://
  • 使用 System.Threading 为它添加使用;使用 System.Globalization;如果你完成了,请告诉我
  • 我应该写什么而不是 "someDate" ?因为它向我显示“当前上下文中不存在名称“someDate”。
【解决方案2】:

您应该将DataTime 存储在数据库中,使用Parameter 作为示例:

command.Parameters.Add("DateField", SqlDbType.DateTime, datetime);

当您想在 asp.net 页面上显示时,您应该获取 DateTime 结构并对其进行格式化,例如:

label1.Text = dateTime.ToString("MM/dd/yyyy");

要了解有关 dateTime 格式的更多信息,请查看 MSDN 文档中的此链接: http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

【讨论】:

  • 我知道,但是。如果 datetype 是像这样的 varchar,我可以存储它 command.Parameters.AddWithValue("@info", DateTime.Now.ToString("dd/MM/yyyy - 00:00:00")); 问题是当我尝试将它保存为 datype 是 datatime 时,它​​给了我错误。
  • 嗯,没有办法将 DateTime 保存在 VarChar 列中,因为如果您在 varchar 列中指定 DataType.DateTime,参数将生成 DateTime 的 SQL。对于 varchar,您必须将 DataType 指定为 varchar(或字符串)并在其中保存一个字符串。
【解决方案3】:

只需使用日期类型参数和 Date 属性。

command.Parameters.AddWithValue("@info", DateTime.Now.Date);

【讨论】:

  • 时间是凌晨 12:00:00。我希望它是 00:00:00 并且日期是 2/23/2014,我希望它是 23/02/2014 首先是日期,然后是月份,它必须是 0,比如 02 而不是 2。
  • @Ceres:为什么不直接使用DateTime.Today
  • @aldoblack,你说的是日期格式,12:00:00 AM 和 00:00:00 是同一时间。无法使用 datetime 数据类型控制日期在内部的存储方式。除非您将数据类型更改为 varchar,否则您所说的没有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2012-10-07
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多