2011-01-11 11 views
14

ユーザーがフォームに記入すると、ドロップダウンを使用してテストのスケジュールを設定する時間を指定します。このドロップダウンには、AM/PMの12時間形式で15分ごとに1日のすべての時間が表示されます。たとえば、ユーザーが午後4時15分を選択した場合、サーバーは文字列"4:15 PM"をフォーム送信と共にWebサーバーに送信します。12時間文字列をC#TimeSpanに変換するにはどうすればよいですか?

この文字列をTimespanに変換する方法が必要なので、データベースの時刻フィールド(linqからsqlへ)に格納することができます。

誰でも、AM/PM時間文字列をタイムスパンに変換する良い方法はありますか?

答えて

38

TimeSpanの代わりにDateTimeを使用します。 DateTime.ParseExactを使用して、文字列を解析してDateTimeオブジェクトにすることができます。

string s = "4:15 PM"; 
DateTime t = DateTime.ParseExact(s, "h:mm tt", CultureInfo.InvariantCulture); 
//if you really need a TimeSpan this will get the time elapsed since midnight: 
TimeSpan ts = t.TimeOfDay; 
+7

この例は実際には「11:00 PM」などの文字列では機能しません。大文字の「H」形式は、24時間制を示します。小文字の "h"を使用すると、その問題が修正されます。 –

+1

これは本当に重要な詳細です。確認と編集。 –

+1

時刻が「h:mm tt」の場合、つまり4.15 PMですが、時刻が「hh:mm tt」の場合(12.45 PM)は機能しません。どちらのフォーマットにも対応していますか? – gurrawar

1

試してみてください。

string fromServer = <GETFROMSERVER>(); 
var time = DateTime.Parse(fromServer); 

あなたが同様にあなたがDateTimeオブジェクト/ wの算術演算を行うことによって、タイムスパンを得ることができ、終了時刻を作成する場合は、あなたの時間を取得します。

3

これを試してみてください:

var time = "4:15 PM".ToTimeSpan(); 

DateTime time; 
if(DateTime.TryParse("4:15PM", out time)) { 
    // time.TimeOfDay will get the time 
} else { 
    // invalid time 
} 
7

最も簡単な方法は、このようなものです。

これはPhilのコードを取り、ヘルパーメソッドに置きます。それは些細だが、それはそれ一行呼び出します:

public static class TimeSpanHelper 
{   
    public static TimeSpan ToTimeSpan(this string timeString) 
    { 
     var dt = DateTime.ParseExact(timeString, "h:mm tt", System.Globalization.CultureInfo.InvariantCulture);    
     return dt.TimeOfDay; 
    } 
} 
+0

フォーマット文字列は "h:mm tt"または "AM/PM"と "h:mmtt"の間にスペースを入れないでください。 –

+0

@DanRandolph提案のおかげで、私は言及したように解決策を編集しました。 – Lee

2

私は李氏の答えは最高に好きですが、あなたはtryparseを使用したい場合は、正しいacermateだろう。これを組み合わせてtimespanを取得するには:

public TimeSpan GetTimeFromString(string timeString) 
    { 
     DateTime dateWithTime = DateTime.MinValue; 
     DateTime.TryParse(timeString, out dateWithTime); 
     return dateWithTime.TimeOfDay; 
    } 
関連する問題