Windows phone 7 在windows phone中分析不同语言时更改日期

Windows phone 7 在windows phone中分析不同语言时更改日期,windows-phone-7,datetime,localization,Windows Phone 7,Datetime,Localization,我遇到了一个奇怪的问题。我的应用程序已本地化,支持5种语言。 这是一个日历类的应用程序,我可以选择为特定日期写笔记。 因此,当我将语言设置更改为俄语时,请在日期上输入注释,例如2012年1月3日和2012年6月3日。此日期和注释存储在一个隔离存储文件中,我退出应用程序 现在,我将语言设置更改为英语,笔记存储在2012年3月1日和2012年3月6日。月份和日期颠倒了!!:( 这就是我如何将注释写入文件的方式 using (IsolatedStorageFileStream fileStream =

我遇到了一个奇怪的问题。我的应用程序已本地化,支持5种语言。 这是一个日历类的应用程序,我可以选择为特定日期写笔记。 因此,当我将语言设置更改为俄语时,请在日期上输入注释,例如2012年1月3日和2012年6月3日。此日期和注释存储在一个
隔离存储文件中
,我退出应用程序

现在,我将语言设置更改为英语,笔记存储在2012年3月1日和2012年3月6日。月份和日期颠倒了!!:(

这就是我如何将注释写入文件的方式

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

DateTime.Parse
有一个重载方法,在该方法中,您可以传递
CultureInfo.InvariantCulture
以独立于区域设置读取它。此外,您还需要相应地保存值


另外,请查看
Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentUICulture
。您可以将特定的区域性设置为全局应用程序。

日期时间。Parse
有一个重载方法,您可以传递
CultureInfo.InvariantCulture
以独立于区域设置来读取它。另外,您还可以你也需要相应地保存价值


另外,请查看
Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentUICulture
。您可以将特定区域性设置为全局应用程序。

使用m_arrNoteDate[i]。ToString(“d”,System.Globalization.CultureInfo.InvariantCulture)写入日期时,使其独立于线程区域性。

在写入日期时,使用m_arrNoteDate[i].ToString(“d”,System.Globalization.CultureInfo.InvariantCulture),使其独立于线程区域性。

默认情况下,日期和字符串之间的转换(反之亦然)使用当前区域性。出于您的目的,由于您不是为了向用户显示日期而转换字符串,而是为了将日期持久化,因此您应该通过指定给定区域性使逻辑独立于当前区域性。而不变区域性是您的最佳选择

因此,请将其替换为:

writer.Write(m_arrNoteDate[i].ToShortDateString());
m_arrNoteDate[count] = DateTime.Parse(temp);
为此:

writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture);
m_arrNoteDate[count] = DateTime.Parse(temp, CultureInfo.InvariantCulture);
并将其替换为:

writer.Write(m_arrNoteDate[i].ToShortDateString());
m_arrNoteDate[count] = DateTime.Parse(temp);
为此:

writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture);
m_arrNoteDate[count] = DateTime.Parse(temp, CultureInfo.InvariantCulture);

默认情况下,日期和字符串之间的转换(反之亦然)使用当前区域性。出于您的目的,由于您不是为了向用户显示日期而转换字符串,而是为了将日期持久化,因此您应该通过指定给定区域性使逻辑独立于当前区域性。而不变区域性是您的最佳选择

因此,请将其替换为:

writer.Write(m_arrNoteDate[i].ToShortDateString());
m_arrNoteDate[count] = DateTime.Parse(temp);
为此:

writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture);
m_arrNoteDate[count] = DateTime.Parse(temp, CultureInfo.InvariantCulture);
并将其替换为:

writer.Write(m_arrNoteDate[i].ToShortDateString());
m_arrNoteDate[count] = DateTime.Parse(temp);
为此:

writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture);
m_arrNoteDate[count] = DateTime.Parse(temp, CultureInfo.InvariantCulture);

谢谢,你能告诉我“d”是什么吗?不客气!关于“d”,它是ToString()识别的短日期格式模式。ToSortDateString()的MSDN文档说:“返回值与通过使用ToString(string)方法指定“d”标准日期时间格式字符串返回的值相同”。由于ToSortDateString不允许您传递区域性,因此在这种情况下,您只能使用ToString。谢谢,您能告诉我“d”是什么吗?不客气!关于“d”,ToString()可以识别的是短日期格式模式。ToSortDateString()的MSDN文档说明:“返回值与通过使用ToString(string)方法指定“d”标准日期时间格式字符串返回的值相同”。由于ToSortDateString不允许您传入区域性,因此在这种情况下,您只能使用ToString。