2009-03-30 11 views
1

時間を表示するドロップダウンリストがあります。たとえば、8:00 AMまたは8:30 AMです。日時に変換するには

この時間をデータベースに保存すると、今日の日付+時刻として保存します。 例:8:00 AMとして03/30/2009 8:00:00:000。誰も上記のように変換する適切なコードを与えることができますか?

私は

Convert.ToDateTime(ddlStartTime.SelectedItem.Text) 

を試みたが、というエラーがあり、「文字列が有効な日時として認識されませんでしたが。」

+0

@Cerebrus:あなたの意見と、ramyatk06の回答がベストです。 SOコミュニティは投票の結果、どの答えが最良の答えかを判断します。上記のコメントは、ここに示されている一般的な精神の反対です。 – AnthonyWJones

+0

@Anthony:それは冗談で作られたコメントであり、それはかなり明白だったと思います。私はここに来て、SOの精神を理解し、それに従っています。私は頻繁に(そして覚えておくべきであるが)ここではほとんどの人がユーモア感覚を欠いていると言われている。 – Cerebrus

+0

@Cerebrus: "ここではほとんどの人がユーモアのセンスが欠けている"と断言するのは間違いなく面白くない。 – AnthonyWJones

答えて

3

Portmans SolutionのVB.NET答え。コメントには多すぎる文字が含まれています。

Dim time As String() = Me.DropDownList1.SelectedValue.Split(New Char() {":", " "}) 
Dim hours As Integer = Integer.Parse(time(0)) 
Dim minutes As Integer = Integer.Parse(time(1)) 
Dim ampm As Integer = 12 
If time(2).ToLower() = "am" Then 
    ampm = 0 
End If 
Dim dt As DateTime = DateTime.Today.AddHours(hours + ampm).AddMinutes(minutes) 
+0

@ ramyatk06:あなたの質問にはVB.NETについて特別な質問があるので、あなたは私の答えを受け入れずにこの回答を受け入れるべきです。 – Portman

0

あなたは時間と分を持っているので、次のコードを使用し、時間の部分を読む:

DateTime myDate = DateTime.Now.Date; 
myDate = myDate.AddHours(hours); 
myDate = myDate.AddMinutes(minutes); 
+0

これはvbで動作しますか? – AnthonyWJones

+0

AM/PMはどのように処理されますか? – AnthonyWJones

+0

このソリューションにはわずかな欠陥があるかもしれませんが、ここに示す他のソリューションよりもきれいです。 – Cerebrus

2

はDateTime.TryParseとDateTime.Todayを見てください。それらを使うことは、あなたが望むことをするのに十分であるはずです。

未知のコード。

DateTime dt; 
if (DateTime.TryParse(Dropdown1.SelectedValue, out dt)) 
{ 
    DateTime result = DateTime.Today.AddHours(dt.Hour).AddMinutes(dt.Minute); 
} 
+0

どのようにそのcode.can uを表示する1: – user42348

+0

ニース! AddHours()とAddMinutes()を削除できます。 DateTime.Parseは、時刻のみを解析するときに自動的に日付を今日に設定します。 – Portman

+0

ありがとうポートマン、私は試して私の前にVSを持っていなかった。 – Craig

2

各ドロップダウンアイテムの値として、時間が表す深夜からの分数を格納します。次に、: -

valueToStore = DateTime.Today + TimeSpan.FromMinutes(Int32.Parse(value)) 

あなたは、単に一連の値を表示するために使用される実際のフォーマット上のコードの依存を排除​​する値の簡単な表現を格納するためのHTMLオプションのvalue属性を使用して格納することによって。時間の表現が異なるフォーマットを使用するように変更されると決定した場合、残りのコードは変更されずに動作し続けます。

+0

このソリューションは、不必要に複雑です。いいえを計算する必要はありません。深夜から数分。 – Cerebrus

+0

時刻の値と時刻の視覚的表現は「不要」に結合されています。それらを切り離すことをお勧めします。顧客が時間の提示を24時間と言うように変更したい場合、プレゼンテーションを生成するコードのみが変更される必要がある。 – AnthonyWJones

1
var time = this.DropDownList1.SelectedValue.Split(':', ' '); 
var hours = Int32.Parse(time[0]); 
var minutes = Int32.Parse(time[1]); 
var ampm = (time[2] == "PM") ? 12 : 0; 
var dt = DateTime.Today.AddHours(hours + ampm).AddMinutes(minutes); 

DropDownListを時間と分で構文解析し、DateTime.Todayに追加します。

+0

申し訳ありませんが、これをVB.NETに翻訳する方法はわかりません。誰でもこのロジックを盗み、VB.NETの答えを書くことを歓迎します。 – Portman

+0

あまりにも多くのvarを使用すると、これを作ったことがあります.net 3+ – cjk

2

基本的に、時間文字列を解析するだけで済みます。現在の日付に自動的に解決されます。

Dim strTime As String = "8.30am" 
Dim parsedTime As DateTime 
If DateTime.TryParseExact(strTime, "h.mmtt", New System.Globalization.DateTimeFormatInfo(), Globalization.DateTimeStyles.None, parsedTime) = True Then 
    'Parse was successful. 
Else 
    'Handle the error. 
End If 
+0

フィールドの値を現在のテキスト表現にバインドするのは良い考えではありません。テキスト表現が変更された場合、それを解析するコードを変更する必要があります。 HTMLオプションに値属性があるため、値とプレゼンテーションを切り離すことができます。 – AnthonyWJones

+0

それでも、それはOPによってなされた決定です。私はOPの既存のセットアップに基づいて解決策を提示しました。 ValueプロパティではなくSelectedItem.Textプロパティが使用されていることは明らかです。 – Cerebrus

+0

私の提案は、テキストの使用をやめ、それをプレゼンテーションのために残し、簡単な明白な値に設定された値を使用して開始することです。 – AnthonyWJones

0

使用する形式を指定できるように、ParseExactを使用します。

h = 12時間形式の時刻
。 =リテラル文字
ミリメートル= 2桁
TT = AM/PM指定子

Dim time As DateTime = DateTime.ParseExact(dropdown.SelectedValue, "h.mmtt", CultureInfo.InvariantCulture) 

あなたは文字列で指定していないDateTime値のコンポーネント(年、月、日、秒分程度、タイムゾーン、時代)は、既定値としてDateTime.Todayを使用します。これはまさにこの場合に必要なものです。

0

これは常に私にとってはうまくいくようです。最もエレガントな方法ではないかもしれませんが、これまでのところ問題はありませんでした。

dTime = DateTime.Now; 

string time = this.DropDownList1.SelectedValue;  

DateTime FormattedDateTime = Convert.ToDateTime(dTime.Date.ToShortDateString() + 
" " + time); 
関連する問題