0

テキストボックスから日付を取得し、関数を介してそれをdateTimeに渡します。

しかし、それは私に2つの異なる結果をもたらします

DateTime Fromdate1 = devTools.ParseDate(datepicker1.Text);

TextBox ---> OutPut

2012年2月9日->2012年2月9日12:00:00AM

2012年8月30日->2012年8月30日12:00:00AM

public DateTime ParseDate(string s)
    {
        DateTime result;
        if (!DateTime.TryParse(s, out result))
        {
            string[] formats = { "dd'/'MM'/'yyyy" };
            result = DateTime.ParseExact(s, formats, new CultureInfo("en-US"), DateTimeStyles.None);
            //result = DateTime.ParseExact(s, "dd'/'MM'/'yyyy", System.Globalization.CultureInfo.InvariantCulture);
            //result = result.AddDays(1);
        }
        return result;
    }

ここでの問題は何ですか、一定の出力タイプを取得するための適切な方法はありますか?また、08/09は09/08に対してチェックされるため、DBで問題が発生します。その逆も同様です。

SQLのもう1つの問題:

Select convert(nchar(10),FromDate, 103) AS FromDate,convert(nchar(10),ToDate, 103) AS ToDate FROM Tbl_PropertyRoomSeasonPrices

出力:

2012年8月28日| 2012年9月1日

dd / mm / yyyy | mm / dd / yyyy
(正しい)(間違っている)

しかし、fromDateの103とtoDateの101は両方とも同じになります、なぜバリエーション??

4

3 に答える 3

0

ここでの「問題」は、出力をどのように解釈しているかにあるように思えます。あなたのメソッドはDateTime、文字列ではなく、あなたが書いたときに返す. "02/09/2012 --> 2/9/2012 12:00:00 AM" というのは、文字列 "02/09/2012" を入力すると結果DateTimeたまたま"2 /9/2012 12:00:00 AM" を文字列に変換する方法 (デバッガーを調べるなど) で行います。これは現在のカルチャと既定の形式を使用しますが、それはDateTime値自体の一部ではありません。

のプロパティをDateTime見ると、正しく解析されていることがわかります。

また、08/09 は 09/08 に対してチェックされ、その逆も同様であるため、DB で問題が発生します。

いいえ、そうではありません。DateTimeパラメータ化されたSQLを使用し、プロパティの値を指定するなど、適切に行っている場合はそうではありません。値を SQL に直接含めていると問題が発生する可能性がありますが、とにかくそれは悪い考えです。

于 2012-08-28T06:36:55.953 に答える
0

IFormatProvider を受け入れるオーバーロードされた Parse メソッドを使用してみてください。例えば;

DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out result);
于 2012-08-28T06:37:29.290 に答える
0
DateTime.ParseExact(DateTime.Now, new string[]{ "dd/MM/yyyy" }, ...);
于 2012-08-28T06:38:11.820 に答える