将javascript变量“11:00 AM”转换为c#等效变量,其中SQL为时间格式

本文关键字:变量 SQL 格式 时间 其中 转换 javascript AM | 更新日期: 2023-09-27 18:13:57

我有以下模型属性

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

我的api调用是"/api/CallLog/AddCallLog"。其中CallLog数据包含

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".Path"startTime"时出错……}
{"将值"11:30 AM"转换为类型"System.TimeSpan".Path"endTime"时出错……}

我的问题是,对于"上午11:00"这样的时间,我需要什么数据类型。请记住,数据库中startTime和endTime的数据类型是"time"。

将javascript变量“11:00 AM”转换为c#等效变量,其中SQL为时间格式

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

string pattern = "HH:mm 'AM'";
TimeSpan yourTimeSpan = DateTime.ParseExact(
                                      "11:30 AM",
                                      pattern,
                                      CultureInfo.InvariantCulture
                                      ).TimeOfDay;

它会给你时间跨度值11:30:00

所以,你可以修改你的代码如下:

private string _endTime;
public TimeSpan endTime 
{
    get
    {
        return DateTime.ParseExact(
                                  _endTime,
                                  "HH:mm 'AM'",
                                  CultureInfo.InvariantCulture
                                  ).TimeOfDay;
    }            
}

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

DateTime.Now.ToString("t"); // 11:00 AM

因此,您可以更改CallLog

public class CallLog
{
      public int CallLogID { get; set; }
      public DateTime endTime { get; set; }
      public DateTime startTime { get; set; }
}
DateTime.Parse("11:00 AM").TimeOfDay

它为您提供值为11:00:00TimeSpan