2012-03-06 2 views
0

私は奇妙な問題に遭遇しました。 MYアプリは、5つの言語をサポートするためにローカライズされています。 これはカレンダーの種類のアプリであり、特定の日付のメモを書くオプションがあります。 言語設定をロシア語に変更する場合は、日付にメモを入力します(例:1/3/2012と6/3/2012)。この日付とメモはIsolatedStorageFileに保存されています。アプリを終了します。異なる言語のWindows Phoneで解析中に日付が変わる

言語設定を英語に変更し、ノートは2012年3月1日と3/6/2012に保存されます。月と日付は逆です!私は、パーサーは、言語、デバイスに応じた形式で日付を読み込み、この

if (notes.Substring(i, 1) == " ") 
{ 
     m_arrNoteString[count] = notes.Substring(i + 1); 
     string temp = notes.Substring(0, i); 
     m_arrNoteDate[count] = DateTime.Parse(temp); 
     count++; 
     nextCharacter = (char)reader.Read(); 
     notes = ""; 
     break; 
} 

のように行われているファイルから

using (IsolatedStorageFileStream fileStream = storagefile.OpenFile("NotesFile", FileMode.Open, FileAccess.ReadWrite)) 
{ 
    StreamWriter writer = new StreamWriter(fileStream); 

    for (int i = 0; i < m_noteCount; i++) 
    { 
     writer.Write(m_arrNoteDate[i].ToShortDateString()); 
     writer.Write(" "); 
     writer.Write(m_arrNoteString[i]); 
     writer.WriteLine("~`"); 
    } 
    writer.Close(); 
} 

読書があるファイルにメモを書き込む方法:(

です設定されている?任意の回避策?

Alfah

答えて

1

デフォルトでは、日付と文字列の間の変換(およびその逆)は現在のカルチャを使用します。あなたの目的のために、あなたは日付をユーザに表示する目的で文字列に/から変換するのではなく、それらを永続させるために、特定の文化を指定することによって現在の文化とは独立したロジックにする必要があります。そして不変の文化はあなたの最高のものです。これにより

m_arrNoteDate[count] = DateTime.Parse(temp); 

:これで

writer.Write(m_arrNoteDate[i].ToShortDateString()); 

を::これを

writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture); 

をして交換

だから、これを置き換える

m_arrNoteDate[count] = DateTime.Parse(temp, CultureInfo.InvariantCulture); 
+0

ありがとう、 "d"が何であるか教えていただけますか? – alfah

+0

問題を解決してくれてありがとう!! :D – alfah

+1

あなたは大歓迎です! "d"については、ToString()によって認識される短い日付形式のパターンです。 ToShortDateString()のMSDNのドキュメントでは、「返り値は、ToString(String)メソッドで標準のDateTime書式文字列 "d"を指定して返される値と同じです。 ToShortDateStringではカルチャを渡すことができないため、この場合はToStringを使用しています。 – Clafou

1

DateTime.Parseにはオーバーロードされたメソッドがあり、CultureInfo.InvariantCultureに渡してリージョン設定とは無関係に読み取ることができます。また、それに応じて価値を保存する必要もあります。

また、Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICultureをご覧ください。特定のカルチャーをグローバルにアプリケーションに設定できます。

1

スレッドカルチャに依存しないように日付を記述するときは、m_arrNoteDate [i] .ToString( "d"、System.Globalization.CultureInfo.InvariantCulture)を使用します。

関連する問題