将DateTime日期和字符串时间组合到C#中的单个DateTime中

时间:2016-12-12 07:32:45

标签: c# asp.net asp.net-mvc date datetime

我正在使用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);

2 个答案:

答案 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));