web-dev-qa-db-ja.com

TimeSpanからDateTimeへの変換

TimespanをDatetimeに変換したい。これどうやってするの?

Googleで1つの方法を見つけました。

DateTime dt;
TimeSpan ts="XXX";

//We can covnert 'ts' to 'dt' like this:

dt= Convert.ToDateTime(ts.ToString());

これを行う他の方法はありますか?

58
Raghav55

TimeSpanをDateTimeに変換することはあまり論理的ではありません。 leppieが上で言ったことを理解してください。 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;
89
Arif Eqbal

選択した答えは厳密に正しいものですが、私は同様の問題を抱えていたため、OPがここで何をしようとしているかを理解していると思います。

グリッドコントロールに(hh:mmのように)表示したいTimeSpanがありましたが、グリッドはTimeSpanを理解していないようで、DateTimeのみを認識していました。 OPには同様のシナリオがあり、TimeSpanのみが関連部分ですが、DateTime参照ポイントを追加する必要性を考慮しませんでした。

したがって、上で示したように、DateTime.MinValueを追加しました(ただし、どの日付でも実行できます)。これは、結果の日付の時間部分としてタイムスパンをレンダリングするときにグリッドによって無視されます。

30
Mike

これを実現するために、TimeSpanを新しいDateTimeに追加できます。

TimeSpan ts="XXX";
DateTime dt = new DateTime() + ts;

ただし、前述のとおり、有効な開始日がないと厳密に論理的ではありません。私は時間の側面のみを必要とするユースケースに遭遇しました。ロジックが正しい限り正常に機能します。

12
Tony Thomas

これを有効にするには基準日が必要です。

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);  
8
NaN
var StartTime = new DateTime(item.StartTime.Ticks);
1
Arun Prasad E S

データグリッドまたは同様のラベルで時間値のみを表示する必要がある場合、最善の方法は、日時データ型で時間を直接変換することです。

SELECT CONVERT(datetime、myTimeField)as myTimeField FROM Table1

0
Paolo

また、finishTmeが時間の刻みを含むlongであるDateTime.FromFileTime(finishTime)を使用することもできます。またはFromFileTimeUtc。

0
user2825546