2017-03-31 58 views
3

当使用日期时间的.ParseExact()方法,我总是得到输出作为我把字符串同样在这里是我的代码:DateTime.ParseExact没有做什么,我想要它做的

[Authorize(Roles = "Backoffice, Manager")] 
    [HttpPost] 
    public ActionResult FilmShowCreate(FilmShowViewModel newFilmShow) 
    { 
     if (ModelState.IsValidField("FilmId") && ModelState.IsValidField("Time")) 
     { 
      DateTime unformattedDateTime = newFilmShow.Date.Date + newFilmShow.Time.TimeOfDay; 
      string dateString = unformattedDateTime.ToString("yyyy-MM-dd HH:mm:ss"); 
      DateTime dbDate = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss", 
       CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.AdjustToUniversal); 

      FilmShow filmShow = new FilmShow 
      { 
        Film = filmRepository.GetFilm(newFilmShow.FilmId), 
        Cinema = cinemaRepository.GetCinema(newFilmShow.CinemaId), 
        ThreeDimensional = newFilmShow.ThreeDimensional, 
        Date = dbDate, 
        SpecialEvent = newFilmShow.SpecialEvent 
      }; 

      filmShowsRepository.AddShow(filmShow); 

      return View("SuccesfullFilmShowCreate"); 

字符串dateString格式不错,但它是一个字符串,我需要将它作为格式DateTime存储在数据库中,如“year-month-day hours:minutes:seconds”。但无论出于何种原因,ParseExact在我的情况下似乎不起作用。我得到的DateTime格式是“dd-MM-yyyy HH:mm”。

回答

3

它不会做你想要的,因为,那个函数不是应该是来做你所描述的。

ParseExact只是表示输入必须匹配给定的格式才能使用(而不是抛出异常)。它是Parse的对应部分,它将接受任何有效的日期/时间格式。 它对它创建的DateTime对象的任何字符串表示形式的未来格式完全没有影响。

如果你想输出它在一个给定的格式,通过您的格式字符串转换为ToString发送该字符串到数据库之前。当然,如果你使用的是像EF这样的东西,转换就是为你完成的,并不重要。

例子:

string myFormattedDateTime = dbDate.ToString("yyyy-MM-dd HH:mm:ss"); 

更加紧密,我知道读你的问题,你似乎认为,日期时间有一些“存储”的格式。它不是。 DateTime只是一些数字的集合,它们包含表示日期和时间所需的信息。您描述的格式只有存在于字符串表示中。

+0

嗨,谢谢你的回复!我理解你的故事,但它并不能真正解决我的实际问题。当我在迁移时运行种子方法时,我添加了如下所示的日期时间:Date = new DateTime(2017,03,08,14,00,00)导致日期2017-03-08 14:00:00其中是我想要的,但是当我使用我的存储库添加日期时间时,我得到以下格式2017-08-03 14:00:00这是日和月转换。我真的不知道这是什么造成的,但是真的很让人沮丧。 –

+0

@NickBurggraaff对不起,我认为你需要更多的调试。放心'ParseExact'不是你的问题。 – BradleyDotNET

+0

感谢您的帮助!通过分配一天到一个月和一个月到一天来修复它。不是一个很干净的修复,但是是有效的......那是重要的。 –

相关问题