将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"。
根据错误的说法,您可能必须提供从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:00
的TimeSpan
。