以下代码在示例.Net Core控制台应用程序上正常工作:
在这个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中获得正确的结果?
更新:
下面这行代码:
但是遇到了这个异常:
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
。
接下来的尝试:我非常想以以下方式将波斯文化的默认日历设置为波斯日历:
new CultureInfo("fa-IR").DateTimeFormat.Calendar = new PersianCalendar();
但是遇到了这个异常:
System.ArgumentOutOfRangeException: 该文化中没有有效的日历。
然后在搜索其他类似的SO问题后,在官方的PersianCalendar文档中发现了以下说明:
您不能将PersianCalendar对象用作文化的默认日历。默认日历由CultureInfo.Calendar属性指定,必须是CultureInfo.OptionalCalendars属性返回的日历之一。目前,PersianCalendar类不是CultureInfo类支持的任何文化的可选日历,因此不能是默认日历。
System.Globalization.GregorianCalendar
。在控制台应用程序中,它返回System.Globalization.PersianCalendar
。 - VahidShirLocalDateTime.FromDateTime(DateTime.Now, CalendarSystem.PersianSimple).ToString("f", new CultureInfo("fa-IR"));
在 .Net Core控制台应用程序中显示出了يكشنبه, 3 شهریور 1398 02:36 ب.ظ
,这是正确的,但在Xamarin.Forms中却显示出了یکشنبه, 3 ژوئن 1398 02:32 ب.ظ
。问题在于后者中“June”被直接翻译为“ژوئن”,但它应该像前者一样显示“شهریور”! - VahidShir