转换javascript变量“;上午11:00”;到c#等价物,其中SQL为时间格式

转换javascript变量“;上午11:00”;到c#等价物,其中SQL为时间格式,javascript,c#,asp.net,asp.net-mvc,asp.net-web-api,Javascript,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我有以下模型属性 public class CallLog { public int CallLogID { get; set; } public TimeSpan endTime { get; set; } public TimeSpan startTime { get; set; } } 我的api调用是“/api/CallLog/AddCallLog”。调用日志数据包含在哪里 startTime = "11:00 AM" endTime = "11:3

我有以下模型属性

public class CallLog
{
      public int CallLogID { get; set; }
      public TimeSpan endTime { get; set; }
      public TimeSpan startTime { get; set; }
}
我的api调用是“/api/CallLog/AddCallLog”。调用日志数据包含在哪里

startTime = "11:00 AM"
endTime = "11:30 AM"
我的api控制器是

[HttpPost]
public IHttpActionResult AddCallLog(CallLog callLog)
{

    if (!ModelState.IsValid)
    {
        return Json(new
        {
            success = false,
            errors = ModelState.Keys.SelectMany(k => ModelState[k].Errors)
                .Select(m => m.ErrorMessage).ToArray()
        });
    }

    CallLog.InsertCallLog(callLog);

    return CreatedAtRoute("DefaultApi", new { id = callLog.CallLogID }, callLog);
}
它给了我以下的错误

{“将值\“11:00 AM\”转换为类型“System.TimeSpan”。路径“startTime”…}时出错
{“将值\“11:30 AM\”转换为“System.TimeSpan”类型时出错。路径为“endTime”…}


我的问题是像“上午11:00”这样的时间需要什么数据类型。记住我在数据库中的startTime和endTime的数据类型是“time”。

您可以使用
DateTime
忽略日期,只向用户显示时间,将其格式化后输出给用户,如下所示:

DateTime.Now.ToString("t"); // 11:00 AM
string pattern = "HH:mm 'AM'";
TimeSpan yourTimeSpan = DateTime.ParseExact(
                                      "11:30 AM",
                                      pattern,
                                      CultureInfo.InvariantCulture
                                      ).TimeOfDay;
private string _endTime;
public TimeSpan endTime 
{
    get
    {
        return DateTime.ParseExact(
                                  _endTime,
                                  "HH:mm 'AM'",
                                  CultureInfo.InvariantCulture
                                  ).TimeOfDay;
    }            
}
所以你可以改变呼叫记录

public class CallLog
{
      public int CallLogID { get; set; }
      public DateTime endTime { get; set; }
      public DateTime startTime { get; set; }
}

它为您提供
TimeSpan
11:00:00

根据错误说明,您可能必须提供从
字符串
类型
“11:30 AM”
TimeSpan
类型的正确转换。您可以通过如下参数将
DateTime.ParseExact
与转换模式一起使用:

DateTime.Now.ToString("t"); // 11:00 AM
string pattern = "HH:mm 'AM'";
TimeSpan yourTimeSpan = DateTime.ParseExact(
                                      "11:30 AM",
                                      pattern,
                                      CultureInfo.InvariantCulture
                                      ).TimeOfDay;
private string _endTime;
public TimeSpan endTime 
{
    get
    {
        return DateTime.ParseExact(
                                  _endTime,
                                  "HH:mm 'AM'",
                                  CultureInfo.InvariantCulture
                                  ).TimeOfDay;
    }            
}
它将为您提供时间跨度,值为11:30:00

因此,您可以将代码修改为以下内容:

DateTime.Now.ToString("t"); // 11:00 AM
string pattern = "HH:mm 'AM'";
TimeSpan yourTimeSpan = DateTime.ParseExact(
                                      "11:30 AM",
                                      pattern,
                                      CultureInfo.InvariantCulture
                                      ).TimeOfDay;
private string _endTime;
public TimeSpan endTime 
{
    get
    {
        return DateTime.ParseExact(
                                  _endTime,
                                  "HH:mm 'AM'",
                                  CultureInfo.InvariantCulture
                                  ).TimeOfDay;
    }            
}

您可以使用timespan
timespan timespan=new timespan(11,00,00)将显示上午11:00