изменения даты при разборе в Windows Phone для разных языков - PullRequest
0 голосов
/ 06 марта 2012

Я столкнулся со странной проблемой.Мое приложение было локализовано для поддержки 5 языков.Это приложение типа календаря, и у меня есть возможность писать заметки на определенную дату.Поэтому, когда я изменяю свои языковые настройки на русский, введите заметку о дате, например, 1/3/2012 и 6/3/2012.Эта дата и примечание сохраняются в IsolatedStorageFile, и я выхожу из приложения.

Теперь я изменяю свои языковые настройки на английский, а примечания сохраняются в 3/1/2012 и 3/6/2012,Месяц и дата поменялись местами!:(

Вот как я записываю заметки в файл

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();
}

Чтение из файла выполняется следующим образом

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;
}

парсер читает дату вотформатировать в соответствии с языком, на котором установлено устройство? Любые обходные пути?

Ответы [ 3 ]

1 голос
/ 06 марта 2012

Используйте m_arrNoteDate [i] .ToString ("d", System.Globalization.CultureInfo.InvariantCulture) при записи даты, чтобы она не зависела от культуры потока.

1 голос
/ 06 марта 2012

По умолчанию преобразование между датами и строками (и наоборот) использует текущую культуру.Для вашей цели, поскольку вы не конвертируете в / из строк с целью отображения дат для пользователя, а для их сохранения, вы должны сделать свою логику независимой от текущей культуры, указав данную культуру.И инвариантная культура - ваша лучшая.

Так что замените это:

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

На это:

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

И замените это:

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

С этим:

m_arrNoteDate[count] = DateTime.Parse(temp, CultureInfo.InvariantCulture);
1 голос
/ 06 марта 2012

DateTime.Parse имеет перегруженный метод, где вы можете передать CultureInfo.InvariantCulture, чтобы прочитать его независимо от настроек региона. Кроме того, вам тоже необходимо сохранить значение.

Также посмотрите на Thread.CurrentThread.CurrentCulture и Thread.CurrentThread.CurrentUICulture. Вы можете установить конкретную культуру для применения во всем мире.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...