2017-03-21 6 views
7
string date = "17:25"; 
if(date.Lenght == 5){ 
    myobj.StartTime = DateTime.ParseExact(date, "HH:mm", CultureInfo.InvariantCulture); 
    // add only hh and minutes and preserve day and year 
} 
else if(date.Lenght > 5){ 
    myobj.StartTime = DateTime.ParseExact(date, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); 
} 

myobj.StartTimeは明らかにDateTimeデータ型です。文字列から日時に時間と分を追加する

:でこの文字列を壊して、最初の部分を時間として使用して、それをダブルに変換してからAddHoursを使用すると分かりますが、これを行うには便利な方法があるのでしょうか? ?

+1

また正しく:-) 'Length'を綴るする場合があります。 – Ralph

答えて

11

あなたはTimeSpan.ParseExactを使用することができます。

myobj.StartTime = myobj.StartTime.Add(TimeSpan.ParseExact(date, "hh\\:mm", CultureInfo.InvariantCulture)); 

hhhh\\:mmでいる時間を(あなたは、この具体的な方法でサポートされていない、ここHHを使用することはできません)、mmは数分で、\\::文字をエスケープされます。そこに、あなたはそれ以外TimeSpan.ParseExactは(hのような)カスタム書式指定子として扱われますので、フォーマット文字列にスラッシュで:をエスケープする必要がありますが、:一つのスラッシュは(@"hh\:mm"そうでなければ、これを行うことができます)C#の文字列リテラル内のスラッシュ自体をエスケープすることですそのような書式指定子がなく、無効な書式例外がスローされます。

なお、あなたはまた一桁の時間と分許可している場合(このように:「1:2」または「1時25分」) - あなたが別の形式を使用する必要があります。

TimeSpan.ParseExact(date, @"h\:m", CultureInfo.InvariantCulture); 

この形式を一桁と2桁の時間と分の両方を処理します。このメソッドは動作しません、あなたは(私の知る限り)分割するフォールバックする必要があります -

もあれば、あなたが(「25:11」のように)あなたの文字列に24時間以上を持っていることに注意してください。

+1

は、あなたがこの\\ HH短期で記述してくださいすることができますミリメートル大丈夫です – user1765862

+0

を、ありがとうございました。 – user1765862

+0

その説明で答えが更新されました。 – Evk

関連する問題