3

我看到了很多答案,其中大部分包括使用DateTime.ParseExact和“CultureInfo.InvariantCulture”,但它对我不起作用,我不确定这些答案是否与我需要解决的问题 100% 相关。

我有来自数据库的记录的表。用户可以根据不同的标准执行搜索,其中之一是日期。我使用了一些继承的 jQuery 日历,并且在我的控制器中,来自日期的数据以 format 形式出现"dd/mm/yyyy hh:mm:ss"。我希望能够使用此信息在数据库中搜索同一日期的记录。一个问题是我只想使用日期而不是时间,但我不确定以什么顺序解决这个问题,所以我决定将传入的字符串转换为有效的 MS SQL 日期时间,看看会发生什么以及想想时间。

我尝试了不同的东西,这是我最后一次决定在这里发帖:

    if (!String.IsNullOrEmpty(selDate))
    {
        CultureInfo myCItrad = new CultureInfo("bg-BG", false);
        DateTime parsedDate = DateTime.ParseExact(
           selDate,
           "dd.MM.yyyy hh:mm:ss",
           myCItrad);
        model = model.Where(m => m.Date == parsedDate);
    }
4

4 回答 4

4

当我解析 selDate 字符串不包含它们时,它是 - “23/05/2013 09:04:45”

如果您的输入字符串看起来像,"23/05/2013 09:04:45"那么您应该将此模式用于ParseExact"dd/MM/yyyy hh:mm:ss"

if (!String.IsNullOrEmpty(selDate))
{
    CultureInfo myCItrad = new CultureInfo("bg-BG", false);
    DateTime parsedDate = DateTime.ParseExact(
       selDate,
       "dd/MM/yyyy hh:mm:ss",
       myCItrad);
    model = model.Where(m => m.Date == parsedDate);
}
于 2013-05-23T06:14:45.883 回答
1

一个问题是我只想使用日期而不是时间,

这与 SQL 日期格式无关。

如果您只想使用日期而不是时间,您可以执行以下操作:

model = model.Where(m => m.Date.Date == parsedDate.Date);

或者,如果您愿意:

model = model.Where(m => (m.Date >= parsedDate.Date && m.Date < parsedDate.Date.AddDays(1));

在上面m.Date.DateparsedDate.Date您正在使用该DateTime.Date属性来获取日期值的日期部分,而丢弃时间部分。

于 2013-05-23T07:01:59.970 回答
1

勒隆,

应用程序和 SQL 之间的日期问题是众所周知的。

  1. SQL 和 .NET 日期时间类型不同:http: //msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx
  2. 在 SQL 和 .NET 上都有许多日期时间格式,都需要被视为数字类型。

因此,您需要知道如何在 .NET 端转换众多日期时间格式,将其转换为 SQL 类型,反之亦然。不是一个好习惯...

  1. 使用 SqlDateTime 进行转换。或者:
  2. 一个简单的,有点“肮脏”的解决方案是这样的:
    • 取用户想要的日期。计算距离当前有多少天(例如 --> int days = (DateTime.Now-selectDate).Days;
    • 现在在数据库查询中,使用 SQL:GetDate()-days
于 2013-05-23T06:31:54.290 回答
0

SQL 中的 DateTime 是这种格式 yyyy-MM-dd HH:mm:ss。正确的代码是

DateTime parsedDate = DateTime.ParseExact(selDate, "yyyy-MM-dd" myCItrad);
于 2013-05-23T06:13:01.640 回答