2015-11-25 12 views
7

pasing形式の問題があります。ブートストラップのDateTimePickerを使用してDateTime.TryParseExact C#有効なフォーマットと解析

if (!DateTime.TryParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateOn)) 
{ 
    return false; 
} 
else if (!DateTime.TryParseExact(timeString, "hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out timeOn)) 
{ 
    return false; 
} 

return SaveWorkshop(id, name, dateOn, timeOn, capacity, description, duration, isCancelled); 

は、それがない

日付ストリング= 2015年11月28日の形式でテキストボックスから文字列を取り、timeString = 6時46分AM

しかし結果で私は偽を持っており、デフォルトの日付を解析しています。何が問題なの?

答えて

9

timeStringの場合、hh指定子の代わりにhを使用する必要があります。

hh specifierは、06のように1桁の数字がleading zeroである必要があります。代わりにh specifierを使用する必要があります。

だから、DateTime.TryParseExactが返されてfalsetimeOnが返されるのはそのためです。

+0

"HH" 24時間の時間ではありません。あなたが実際に提供したリンクはそれを言います。ゼロ詰めの12時間制です。 "h"は非ゼロパディングの12時間の時間に対するものであり、 "H"は24時間の非ゼロパディングのものであり、 "HH"はゼロパディングされた24時間のものに対するものである。 – jmcilhinney

+0

@jmcilhinneyあなたが私の間違いに気づいた最初の人のように見えます:)ありがとう、ありがとう。私は編集しました。 –

2

私が間違っていない場合は、「hh」には2桁の時間が必要ですが、これは必要ありません。非ゼロパディング値には "h"を使用します。

0

さらに、今日のミッドナイトの時刻を解析すると、timeStringの解析でTimeSpanが追加されました。したがって

は、このような何かを、今日の日付を遮断する:

// snip .. 
DateTime datetimeOn = dateOn.Add(timeOn.TimeOfDay); 
return SaveWorkshop(id, name, datetimeOn, capacity, description, duration, isCancelled); 

または、当然のことながら、内部datetimeOnを作成するためにSaveWorkshopを変更します。

編集

また、あなたは一度に解析することができます:

DateTime datetimeOn; 
DateTime.TryParseExact(dateString + timeString, "MM/dd/yyyyh:mm tt", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out datetimeOn); 
+0

私は前にこの方法を使っていましたが、グリッドビューでは時刻と日付の列を分けたいと思います。 – Antoshjke

+0

OKですが、解析する前にこれらを連結することはできませんでしたか?編集を参照してください。 – Gustav

+0

私はそれと一緒に遊んだ。できます。ありがとうございました! – Antoshjke

関連する問題