2016-12-12 4 views
2

asp.net MVCを使用しています。フォームに2つのフィールドがあります。DateTimeの日付と文字列の時間をC#で単一のDateTimeにまとめる

Dateを受け入れ、もう一方はTimeを受け入れるもの。私のViewModelに私は次の2つのプロパティがあります。

public DateTime Date { get; set; } 
public string Time { get; set; } //could potentially make this of type DateTime 

私はDateTimeのように組み合わせた日付と時刻を返し日時と呼ばれるReadOnlyプロパティを作成したいと思います。

これはTimeSpan型のTimeプロパティを作成することができれば非常に簡単ですが、残念ながらMVCは使用しているTimePickerを使用するときに時間をタイムパンドとしてバインドしません。文字列または日時のみを受け入れます。

どうすればいいですか?

働いていない、私が試してみました物事のカップル:

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

答えて

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); 
    } 
} 
+0

@BlakeRivellは時間を削除する - あなたがここでそれを必要とするが、それはきれいな方法 – fubo

+0

だ場合、あなたが何を言っているかわかりませんか? Date.Addの代わりにDate.Date.Addを行うには? –

+0

はい、それはあなたの 'Date'からの時間が1つであればそれを落とします – fubo

0

を持つあなたは、必要な出力に到達するためにTimeSpan.Parseメソッドを使用して、以下のアプローチを使用することができます。 DateTime` `の` Date`プロパティを使用して

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)); 
+0

私の時間が'08:00 AM 'のようにフォーマットされているのでエラーが発生します。 AM/PM –

+0

@BlakeRivell:あなたの編集された答えがあなたに役立つかどうかチェックしてください。 –

関連する問題