【发布时间】:2019-08-18 16:37:06
【问题描述】:
以下代码在示例 .Net Core 控制台应用程序上运行良好:
var result = DateTime.Now.ToString("d", new CultureInfo("fa-IR"));
结果在此 CultureInfo 中正确27/5/1398。 但是 Xamarin.Forms 中的相同代码会导致 18/8/2019 这显然是错误的!我也在 Android 的 MainActivity 上尝试过,但得到了同样的错误结果。
我在两个不同的 Xamarin.Forms 项目上对其进行了测试,一个使用 Xamarin.Forms 版本 3.6.0.220655,另一个使用 4.1.0.555618。
如何在 Xamarin.Forms 上获得正确的结果?
更新:
下面一行:
new CultureInfo("fa-IR").DateTimeFormat.Calendar
显示System.Globalization.GregorianCalendar!为什么???对于这种文化,我希望它是 System.Globalization.PersianCalendar。
下一次尝试: 我非常想以这种方式将波斯文化的默认日历设置为 PersianCalendar:
new CultureInfo("fa-IR").DateTimeFormat.Calendar = new PersianCalendar();
但遇到了这个异常:System.ArgumentOutOfRangeException: Not a valid calendar for the given culture. 然后在搜索了其他类似的 SO 问题后,在官方 PersianCalendar 文档中找到了这个注释:
您不能使用 PersianCalendar 对象作为默认日历 文化。默认日历由 CultureInfo.Calendar 指定 属性,并且必须是返回的日历之一 CultureInfo.OptionalCalendars 属性。目前,波斯历 对于任何受支持的文化,类不是可选日历 CultureInfo 类,因此不能是默认日历。
【问题讨论】:
-
new CultureInfo("fa-IR").DateTimeFormat.Calendar显示什么?我的猜测是 Xamarin 不支持相关的日历系统,或者它与该文化数据无关。 -
@JonSkeet 它显示
System.Globalization.GregorianCalendar。在控制台应用程序中,它返回System.Globalization.PersianCalendar。 -
那么在这两种情况下我们能做些什么呢?
-
好吧,Xamarin 有
PersianCalendar吗?可以手动使用吗?您可以改用我的 Noda Time 库——它支持波斯日历。 -
是的,我可以访问 Xamarin.Forms 中的 PersianCalendar 类。我会尝试手动使用它。我也会试试你的图书馆。谢谢。
标签: c# xamarin xamarin.forms localization cultureinfo