在服务器上获取错误:“字符串未被识别为有效的DateTime。”

时间:2017-04-15 07:01:13

标签: c#

我使用web api angularjs在c#中使用id来获取fetch数据。但是这个代码在我的本地工作得非常好,并且在服务器上收到错误,例如“字符串未被识别为有效的DateTime”。任何人都知道如何解决这个错误。下面列出了我在c#中的方法。

这是我的api方法:

 var ProItemList = db.Promotion_ctc.Where(x => x.pid == Pro.id)
 .Select(i => new ProductItemViewModel
  {
   ItemId = i.ItemId,
    ProductId = i.ProductId,
    Qty = i.Qty,
     Rate = i.Rate,
     Date = i.Date
   })
   .ToList();

         ProItemList.ForEach(s =>
            {
                s.Date = Convert.ToDateTime(s.Date).ToString("MM-dd-yyyy");                    
            });

    var Details = new
    {
      Pro.id,
      Pro.name,
     Pro.image_url,
      ProItemList 
 };

  return Json(new { data = Details });            
 }

在我的数据库和类中,Date filed数据类型是字符串。所以任何人都知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果您无法在数据库中更改数据类型,那么您应该使用DateTime.ParseExact而不是Convert.ToDateTime

在你的情况下:

DateTime dateTime = DateTime.ParseExact(s.Date,"dd/MM/yyyy", CultureInfo.InvariantCulture);

<强>更新

一旦你获得DateTime(无论是通过使用上述内容还是最好更改数据库中的类型,你都可以获得任何你喜欢的格式的字符串。
例如:

dateTime.ToString("MM-dd-yyyy");

如果您更改了数据类型,那么您的linq会更简单:

Select(i => new ProductItemViewModel
{
    ItemId = i.ItemId,
    ProductId = i.ProductId,
    Qty = i.Qty,
    Rate = i.Rate,
    Date = i.Date.ToString("MM-dd-yyyy")
})
.ToList();

你可以摆脱这个:

ProItemList.ForEach(s =>
{
    s.Date = Convert.ToDateTime(s.Date).ToString("MM-dd-yyyy");                    
});