当文化不是非美国时,我得到一个 String.FormatException 试图转换/解析字符串。奇怪的是,该字符串是通过应用与用于将其解析回字符串的格式和文化完全相同的格式和文化生成的。在下面的代码中,所有这些版本都会失败:
常量字符串文化=“ja-JP”; 常量字符串格式=“dd MMM yyyy”;//原始帖子中的错误包括 {0:} 文化信息信息 = 新文化信息(文化); Thread.CurrentThread.CurrentCulture = 信息; Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture); //string toParse = String.Format(info, format, DateTime.Now); //原帖中的错误 字符串 toParse = DateTime.Now.ToString(format); System.Diagnostics.Debug.WriteLine(string.Format("文化格式 = {0}, 日期 = {1}",culture, toParse)); 尝试 { DateTime 输出 = DateTime.ParseExact(toParse, format, CultureInfo.InvariantCulture); //日期时间输出 = DateTime.ParseExact(toParse, format, info); //日期时间输出 = DateTime.ParseExact(toParse, format, info, DateTimeStyles.None); //日期时间输出 = Convert.ToDateTime(toParse, info); } 捕捉(例外前) { System.Diagnostics.Debug.WriteLine(ex.Message); }
请注意,en-US 的字符串是“2010 年 2 月 25 日”。ja-JP 的字符串是“25 2 2010”。
知道如何让“25 2 2010”恢复日期吗?
提前致谢。
Edit1:我应该注意,日本文化在这里被硬编码只是作为一个例子。我真的需要它来处理用户设置的任何文化。我需要的是一个解决方案,无论用户的文化如何,日期时间格式都可以工作。我认为单 M 做到了。
编辑 2: M 不适用于英语。有人知道适用于所有文化的格式字符串吗?