1

いくつかの DateTime 値を string format に変換しようとしていますyyyy-MM-dd。問題は、日付のみが必要なことですが、私の場合model.StartDateは日付と時刻の両方が含まれています。model.StartDate を文字列 "start" として宣言すると、次のようになります4/1/2014 12:00:00 AM。解析しようとすると、次のエラーが表示されます。

System.FormatException はユーザー コードによって処理されませんでした Message=String は有効な DateTime として認識されませんでした。

私の最善の推測は、文字列に日付と時刻の両方が含まれているためにエラーが発生することですが、間違っている可能性があります。model.StartDate をさらに調べると、Day、DayOfTheWeek なども見つかります。これは正しいアプローチですか? model.StartDateformat で文字列「start」に変換したいだけですyyyy-MM-dd

私のコードは次のとおりです。

string start = model.StartDate.ToString();
model.StartDate = DateTime.ParseExact(start, "yyyy-MM-dd", CultureInfo.InvariantCulture);

string end = model.EndDate.ToString();
model.EndDate = DateTime.ParseExact(end, "yyyy-MM-dd", CultureInfo.InvariantCulture);

何が問題なのかわかりませんが、開始に時間が含まれている可能性がありますか? 何も思いつきません。

model.StartDate と model.EndDate は、ビュー モデルの DateTime プロパティです。

        [NopResourceDisplayName("Admin.GAStatistics.GAStatistics.StartDate")]
        [UIHint("DateNullable")]
        public DateTime? StartDate { get; set; }

        [NopResourceDisplayName("Admin.GAStatistics.GAStatistics.EndDate")]
        [UIHint("DateNullable")]
        public DateTime? EndDate { get; set; }

編集: デバッガーで取得している実際の出力を示す画像をここにアップロードしました: https://imageshack.com/i/1n51u2p

ありがとうございました

4

3 に答える 3

3

日付を文字列に変換していますが、形式を指定していません。試す

string start = model.StartDate.ToString("yyyy-MM-dd);

ToString()現在のスレッドのカルチャ形式を使用して、時刻を含む日付を文字列に変換します。使用される形式はG、一般的な日付と時刻の形式です。

この形式については、カルチャ固有のものがないため、CultureInfo.InvariantCulture を指定する必要はありません。yyyy/MM/ddただし、フォーマットに関する一般的な落とし穴は、一部の文化-では日付指定子として使用され、/日付プレースホルダーであるということです。このような場合、次を使用する必要があります。

string start = model.StartDate.ToString("yyyy-MM-dd,CultureInfo.InvariantCulture);

アップデート

コメントから、model.StartDateandは DateTime オブジェクトでmodel.EndDateなく、時間要素を含む特定の形式の文字列のようです。

実際にやろうとしているのは、元の文字列を解析して DateTime オブジェクトにし、このオブジェクトを新しいフォーマット文字列にフォーマットすることです。

var date=DateTime.ParseExact(model.StartDate,"M/d/YYYY HH:mm:ss tt",
         CultureInfo.InvariantCulture);
model.StartDate=date.ToString("yyyy-MM-dd",CultureInfo.InvariantCulture);

文字列が 2014 年 4 月 1 日の値「4/1/2014 12:00:00 AM」であると仮定します。

于 2014-04-01T10:15:56.733 に答える
1

ParseExactがどのように機能するか(または実際に何をするか)を誤解しているようです。一般に、解析とは、X 型のデータを取得して Y 型に変換するプロセスです。DateTimeこの文脈では、日付stringDateTimeインスタンスに変換することを意味します。これは、インスタンスをフォーマットしようとしているものとはまったく異なります。DateTime

何も解析する必要のない日付が既にある場合は、日付をフォーマットするだけです

model.StartDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);

CultureInfo.InvariantCultureカルチャを認識しないようにする必要があるため、固定形式を使用する場合は重要です。つまり、指定した形式は、すべてのカルチャで表示したい方法とまったく同じです。

于 2014-04-01T10:16:54.857 に答える
-1

DateTimeのプロパティを使用して.Date、日付部分のみを取得します。ToString() は、現在の文化に基づいて異なる結果をもたらします。つまり、ToString() と TryParse が今は機能している可能性がありますが、他の国では機能しません。

ToString() オーバーロードを使用して、特定の形式を指定できます。各種フォーマットはこちら

于 2014-04-01T10:14:26.480 に答える