Timespan を Datetime に変換したい。これどうやってするの?
Googleで1つの方法を見つけました:
DateTime dt;
TimeSpan ts="XXX";
//We can covnert 'ts' to 'dt' like this:
dt= Convert.ToDateTime(ts.ToString());
これを行う他の方法はありますか?
TimeSpan を DateTime に変換することはあまり論理的ではありません。上でレピーが言ったことを理解しよう。TimeSpan は、6 日 5 時間 40 分という期間です。日付ではありません。私が6日と言えば。そこから日付を推測できますか?参照日がない限り、答えはノーです。
したがって、TimeSpan を DateTime に変換する場合は、基準日が必要です。いつから6日と5時間?したがって、次のように書くことができます。
DateTime dt = new DateTime(2012, 01, 01);
TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);
dt = dt + ts;
選択された答えは厳密に正しいですが、私は同様の問題を抱えていたので、OPがここで何を取得しようとしているのか理解していると思います。
グリッドコントロールに表示したいTimeSpanがありましたが(hh:mmとして)、グリッドはTimeSpanを理解していないようで、DateTimeのみを理解しているように見えました。OPにも同様のシナリオがあり、TimeSpanのみが関連部分ですが、DateTime参照ポイントを追加する必要性を考慮していません。
したがって、上記のように、DateTime.MinValueを追加しただけです(ただし、どの日付でもかまいません)。これは、結果の日付の時間部分としてタイムスパンをレンダリングするときに、グリッドによって無視されます。
これを有効にするには、参照日が必要です。
http://msdn.microsoft.com/en-us/library/system.datetime.add.aspxの例
// Calculate what day of the week is 36 days from this instant.
System.DateTime today = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0);
System.DateTime answer = today.Add(duration);
System.Console.WriteLine("{0:dddd}", answer);
上記のすべての問題は、変換が TimeSpan で指定された誤った日数を返すことです。
上記を使用すると、以下は 2 ではなく 3 を返します。
TimeSpan 引数で 2 日を保持し、DateTime 日として返す方法についてのアイデアはありますか?
public void should_return_totaldays()
{
_ts = new TimeSpan(2, 1, 30, 10);
var format = "dd";
var returnedVal = _ts.ToString(format);
Assert.That(returnedVal, Is.EqualTo("2")); //returns 3 not 2
}
まず、タイムスパンを文字列に変換し、次に DateTime に変換してから、文字列に戻します。
Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString();