5

次のコード行はtrueを返します(そうではありません)...そして1.0228をdatetimeに変換します...

DateTime.TryParse(1.0228,out temporaryDateTimeValue)

誰か助けてください。

4

2 に答える 2

10

次のコード行は true を返します (これはすべきではありません)...そして 1.0228 を datetime に変換します...

DateTime.TryParse(1.0228,out temporaryDateTimeValue)

これはコンパイルされません。

ただし、引用符で囲むと(そして少しクリーンアップすると)、

bool success = DateTime.TryParse("1.0228", out temporaryDateTimeValue);

その後、はい、あなたはtrue戻ってきます。理由を理解するにはドキュメントを読む必要がありますが、基本的に、日付をフォーマットするにはさまざまな方法があり、そのうちの 1 つに出くわしました (おそらくM.yyyy?)。

解析したくない場合は、お勧めしますか

bool success = DateTime.TryParseExact(
                   "1.0228",
                   "yyyyMMdd", 
                   CultureInfo.InvariantCulture,
                   DateTimeStyles.None,
                   out temporaryDateTimeValue
               );

それからsuccessですfalse

ドキュメントのコメントから注意します:

文字列は、現在のスレッド カルチャによって暗黙的に提供されるs、現在のオブジェクトの書式設定情報を使用して解析されます。DateTimeFormatInfo

このメソッドは、可能であれば、認識されていないデータを無視しようとし、欠落している月、日、および年の情報を現在の日付で埋めます。s に日付のみが含まれ、時刻が含まれていない場合、このメソッドは時刻が真夜中の 12:00 であると想定します。s の先頭、内部、または末尾の空白文字は無視されます。日付と時刻は、先頭と末尾の NUMBER SIGN 文字のペア ('#'、U+0023) で囲むことができ、1 つまたは複数の NULL 文字 (U+0000) を末尾に付けることができます。

このDateTime.TryParse(String, DateTime)メソッドはstring、現在のカルチャの書式設定規則を使用して日付と時刻の表現を解析しようとするため、string異なるカルチャ間で特定のものを解析しようとすると、失敗するか、異なる結果が返される可能性があります。特定の日付と時刻の形式が異なるロケール間で解析される場合は、DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)メソッドまたはメソッドのオーバーロードの 1 つを使用してTryParseExact、形式指定子を指定します。

基本的に、TryParse与えられた文字列を解析するのは非常に困難です (ただし、" Try" は、メソッドが成功/失敗を示すために bool を返すという事実を実際に参照しています)。

于 2011-06-28T18:39:16.940 に答える
4

いいえ、そのコードは true を返しません - コンパイルさえしません:

using System;

class Program
{

    static void Main(string[] args)
    {
        DateTime dt;
        Console.WriteLine(DateTime.TryParse(1.0228, out dt));
    }
}

エラー:

Test.cs(9,27): error CS1502: The best overloaded method match for
        'System.DateTime.TryParse(string, out System.DateTime)' has some invalid
        arguments
Test.cs(9,45): error CS1503: Argument 1: cannot convert from 'double' to
        'string'

「1.0228」に変更すると、はい、true が返されます「M.yyyy」の形式を使用しているように見えますが、これは間違いなく一部の文化に有効です...そしてDateTime.TryParse、私の見解では使用するのが悪い考えである理由を強調しています. 特定の形式 (または一連の形式) を念頭に置いている場合は、DateTime.TryParseExact代わりに を使用して、形式を指定できるようにする必要があります。

私は通常、正確な形式を指定することをお勧めします。また、日付がユーザーから直接送られてくる場合を除き、通常は指定します (これは私の経験ではめったにありません)。CultureInfo.InvariantCulture

于 2011-06-28T18:35:22.133 に答える