Сравните два разных формата даты в запросе - PullRequest
1 голос
/ 29 декабря 2011

Мне нужно сравнить введенную пользователем дату, "Dt" (в формате мм / дд / гггг), с датой в RavenDB - "ReleaseDate" (отметка времени типа "/ Date (1187668800000) /"). Для этого я использую следующий код, который почти выполняет свою работу, но мне не нужна небольшая помощь, чтобы завершить работу ...

Как сравнить две даты, чтобы я мог успешно выполнить запрос.

    public ActionResult Calculation(DateTime? Dt)
    {             
        var store = new DocumentStore { Url = "http://localhost:80" };
        store.Initialize();

        var CalcModel = new CalcViewModel();

        using (var session = store.OpenSession())
        {       
         //Converting user entered date dt in mm/dd/yyyy format to total 
         //milliseconds - So that later I can compare this value to RavenDB
         //time stamp date format (older versions)

          DateTime d1 = new DateTime(1970, 1, 1);
          DateTime d2 = Dt.Value.ToUniversalTime();
          TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);

          double tmillisecs = ts.TotalMilliseconds; //Not yet using this value. 

          CalcModel.MoviesByDate = session.Query<Movies>()
                                   .Where(x => x.ReleaseDate.Ticks == ts.Ticks)            
                                   .Count();

          // this is where I need to compare two dates - ts.ticks gives the
          // required value of date (1187668800000) multiplied by 10000.
        }

        return View(CalcModel);

    }

Прямо сейчас, когда я отлаживаю, я знаю, какое значение показывает ts.ticks ... и, как я уже говорил выше в комментариях к коду, требуемое значение умножается на 10000. Но я не имею понятия во время выполнения, что значение в x.ReleaseDate равно или x.ReleaseDate.Ticks есть .. я делаю это правильно. Спасибо за помощь.

1 Ответ

3 голосов
/ 29 декабря 2011

Умм ... Я думаю, вы серьезно не понимаете, как работают даты SQL и как они применяются к .NET.Суть дат в том, что они хранятся в числовом, а не в текстовом формате.Поэтому, когда у вас есть объект DateTime, он не сохраняется как текстовая дата, он сохраняется как числовой тип, который можно преобразовать в любой формат, который вы хотите.

Поскольку поставщик .net преобразует собственные объекты базы данных datetime в DateTimeобъекты, вы можете просто сравнить их изначально.т.е.:

DateTime d1 = new DateTime(1970, 1, 1);
CalcModel.MoviesByDate = session.Query<Movies>()
                               .Where(x => x.ReleaseDates.Date == d1.Date)
                               .Count();

Независимо от того, как RavenDB хранит даты внутри, когда объект DateTime материализуется в запросе, он будет в собственном формате .NET.

...