2012-04-23 19 views
45

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

私はGoogleでの一つの方法が見つかりました:

DateTime dt; 
TimeSpan ts="XXX"; 

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

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

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

+4

FROM myTimeFieldとして

SELECT CONVERT(datetime型、myTimeField)は、ちょうど開始日にタイムスパンを追加します。 – leppie

+0

私はスタートタイムを持っていません。公開されているAPIはDateTimeのみをサポートしています – Raghav55

+2

開始点または終了点がない場合、何をしようとしているかは無意味です。 – leppie

答えて

74

TimeSpanをDateTimeに変換することはあまり論理的ではありません。レッピーが上に述べたことを理解しよう。 TimeSpanは、6 Days 5 Hours 40 minutesと表示されます。それは日付ではありません。私が6日言うならば。あなたはそれから日付を推測できますか? REFERENCE日付がない限り、答えはNOです。

TimeSpanをDateTimeに変換する場合は、参照日付が必要です。 6日&いつから5時間?だから、あなたは次のようなものを書くことができます:

DateTime dt = new DateTime(2012, 01, 01); 
TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0); 
dt = dt + ts; 
+1

あなたの答えは正しいと私はあなたに感謝します...しかし、TimeSpanをDateTime _can_に変換することは論理的で意味のあることです。たとえば、Entity Frameworkは、TSQLの時刻タイプ(Time-of-day)をTimeSpanにマップします。深夜からの経過時間です。値を書式設定するにはDateTimeとしたいので、日付部分を除外するフォーマッタメソッドの1つを使うことができます... EFはDateTimeを代わりに使うべきですが、深夜からTimeSpanを処理するには、私はEFの動作を変更することはできません。 – steve

+1

変換にDateTime.Today + tsを使用していますが、表示する時刻をフォーマットしたい場合は、それは良く見えます – zquanghoangz

+0

ちょうどts + dtを試して "+演算子を適用できませんでした"ので注意してください。その合計は可換性ではありません。 – Michal

7

参考にしておくと便利です。 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); 
+0

グリッドに表示する必要があるデータベースからTime値を返すときに非常に便利な機能です! – gchq

25

から

例選択した答えは厳密には正しくですが、私はOPは、私は同様の問題を持っていたとして、ここで取得しようとしているかを理解信じています。

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

上記のように、DateTime.MinValueを追加しただけです(日付は変わりませんが)。その後、結果の日付の時間部分としてタイムスパンをレンダリングするとグリッドによって無視されます。

+0

これは、チャートを除いて、まさに私の使用例でした。私は経過時間をX軸に表示する必要がありました。 –

-3

上記のすべての問題は、変換によって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 
} 
+2

形式 "dd"を使用した場合の期待される結果は "02"になります。 – Joe

+1

コード実行時の実際の結果は "02"です。私が考えることができる唯一の遠隔説明は、_tsがTimeSpanとして定義されていないことです(コードを宣言していない)が、コード内のコメントは間違っています。 _tsがTimeSpanとして宣言されると、durationのdaysコンポーネントの正しい値が返されます。 – Mike

-4

まず、文字列に戻って、その後、日時に、その後、文字列にタイムスパンを変換:

Convert.ToDateTime(timespan.SelectedTime.ToString()).ToShortTimeString(); 
+4

これはOPが提案したものと同じではありませんか?彼は最初に文字列に変換する以外の方法を求めていました。 – Joe

+0

SelectedTimeは存在しません – MiBol

3

のTimeSpanは、これを達成するために、新鮮な日時に追加することができます。

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

-3

簡単な方法は、使用することは、ダニ:あなたが唯一のデータグリッドまたはラベルの時間値を表示する必要がある場合は

new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff") 

この機能はあなたに(日/月/年なし)日付

+1

OPはTimepanをDateTimeに変換したいと考えていますが、あなたの答えはそれに対応していません。 – Mike

+0

ヒント: 'DateTime'時間部分が必要な場合は、' .TimeOfDay'を実行してください。日付部分と同様に、 '。日付'。 – auhmaan

0

を与えます同様に、最良の方法は、datetimeデータ型で直接時刻を変換します。あなたは(あなたが必要となります)開始点を持っている場合は表1

0
var StartTime = new DateTime(item.StartTime.Ticks); 
関連する問題