我正在使用asp.net MVC,我的表单中有两个单独的字段。
接受日期而另一个接受时间。在我的ViewModel中,我有以下两个属性:
public DateTime Date { get; set; }
public string Time { get; set; } //could potentially make this of type DateTime
我想创建一个名为DateTime的ReadOnly属性,它将组合的日期和时间作为DateTime返回。
如果我只能创建TimeSpan类型的Time属性,那将非常简单,但遗憾的是,当使用我正在使用的TimePicker时,MVC不会将时间绑定为时间跨度。它只接受字符串或日期时间。
我有什么想法可以做到这一点吗?
我尝试过的一些不起作用的事情:
public DateTime Date { get; set; }
public string Time { get; set; }
public DateTime DateTime => Date.Date.Add(TimeSpan.Parse(Time)); // Time = "2:00 AM"
唯一可行的方法,但我不确定如下:
public DateTime Date { get; set; }
public DateTime Time { get; set; }
public DateTime DateTime => Date.Add(Time.TimeOfDay);
答案 0 :(得分:4)
您可以将时间解析为TimeSpan
对象并将其添加到当前日期。
格式为08:00 AM
的解析时间可以使用h:mm tt
解析here来解决。
public DateTime Date { get; set; }
public string Time { get; set; }
public DateTime DateTime
{
get
{
return Date.Date.Add(DateTime.ParseExact(Time, "h:mm tt", CultureInfo.InvariantCulture).TimeOfDay);
}
}
<强>更新强>
如果Time
的类型为DateTime
public DateTime Date { get; set; }
public DateTime Time { get; set; }
public DateTime DateTime
{
get
{
return Date.Date.Add(Time.TimeOfDay);
}
}
答案 1 :(得分:0)
您可以使用以下方法,该方法使用TimeSpan.Parse方法来达到所需的输出。
string outputTime = string.Empty;
string timeFormat = inputTime.Substring(inputTime.Length - 2);
switch (timeFormat)
{
case ("AM"):
outputTime = inputTime.Replace("AM", "");
break;
case ("PM"):
int hours = 0;
int.TryParse(inputTime.Replace("PM", ""), out hours);
outputTime = (hours + 12).ToString();
break;
}
DateTime newDateTime = date.Add(TimeSpan.Parse(outputTime));