4

文字列をテキスト ファイルから DateTime に変換しようとしていますが、奇妙な結果が得られます。あるコンピューターでは機能しますが、別のコンピューターでは機能しません。これをすべてのコンピューターで機能させるにはどうすればよいですか? 前回の質問で、文化を追加するように言われましたが、数分間は機能しましたが、現在は機能していません。私のコードは次のとおりです。

string[] stringArray = File.ReadAllLines("C:\\Program Files\\PointOfSales\\RecordTotals.txt");
            int lines = stringArray.Length;

            for (int i = 0; i < (lines / 5); i++)
            {
                TransactionList.Add(new Transaction
                {
                    TotalEarned = Convert.ToDouble(stringArray[(i * 5)]),
                    TotalCost = Convert.ToDouble(stringArray[(i * 5) + 1]),
                    TotalHST = Convert.ToDouble(stringArray[(i * 5) + 2]),
                    Category = stringArray[(i * 5) + 3],
                    HoursSince2013 = Convert.ToDateTime(stringArray[(i * 5) + 4], CultureInfo.InvariantCulture)
                });
            }

エラーが発生しますString was not recognized as a valid DateTime.

何か手がかりはありますか?ありがとう!

編集:MessageBox.Show(stringArray[(i * 5) + 4]);I getの使用26/10/2013 11:58:03 AM

編集:現在の時刻を適切な文化に変換するためにこれが機能しないのはなぜですか?

DateTime Today = DateTime.Now;
            Today = DateTime.ParseExact(Today.ToString(), "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
4

2 に答える 2

1

あなたの文字列は、そのシステムでは、インバリアント カルチャでは有効な日付ではありません: 26/10/2013 11:58:03 AM. インバリアント カルチャでは、日/月/年ではなく、月/日/年が想定されます。

読み取り中のファイルを生成するために使用されているのと同じカルチャを指定する必要があります。ファイルからの読み取りだけでなく、ファイルへの書き込みに使用されているカルチャを特定または標準化する何らかの方法が必要になります。


編集:現在の時刻を適切な文化に変換するためにこれが機能しないのはなぜですか?

現在の文化がその形式を使用していない場合、それは失敗しdd/MM/yyyyます。 Today.ToString()カルチャまたは形式が指定されていないため、米国のシステムでは、MM/dd/yyyy形式を使用して書き出すため、呼び出しが失敗します。

あなたの場合、常に同じカルチャを使用して読み取りと書き込みを行うことをお勧めします - を使用してファイルを書き込む場合: を 使用しtheDate.ToString(CultureInfo.InvariantCulture)て読み取ることができ、同じルール (インバリアント カルチャ) が両方に使用されるため、どのシステムでも機能します。書くことと読むこと。Convert.ToDateTime(theString, CultureInfo.InvariantCulture)

于 2013-11-04T20:14:50.667 に答える
0

like;でカスタム"dd/MM/yyyy HH:mm:ss t"形式を使用する必要があります。InvariantCulture

string s = "26/10/2013 11:58:03 AM";
DateTime dt = DateTime.ParseExact(s, "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
Console.WriteLine(dt);

出力は次のようになります。

10/26/2013 11:58:03 AM

ここにdemonstration.

詳細については、次をご覧ください。

編集:フォーマットにDateTime.Now適合しない場合"dd/MM/yyyy HH:mm:ss tt"、プログラムは失敗します。InvariantCultureすべてのプログラムで、DateTime.Nowフォーマットを正確に使用する必要があります。

于 2013-11-04T20:16:58.080 に答える