Преобразуване на HijriCalendar в Григориански във формуляри на Xamarin

Опитвам се да конвертирам HijriCalendar в Григориански календар в приложението Xamarin Forms. Изглежда обаче, че Xamarin Android не е доволен от него. Не съм го тествал в Xamarin iOS. Използвам код от Не мога да преобразувам от датата на Хиджра в датата по Григорианския календар ( c#) и получавам под изключение, когато инстанцирам обекта HijriCalendar в ред

DTFormat.Calendar = new System.Globalization.HijriCalendar(); //exception is thrown

{System.ArgumentOutOfRangeException: Не е валиден календар за дадената култура. Име на параметър: стойност в System.Globalization.DateTimeFormatInfo.set_Calendar (стойност на System.Globalization.Calendar) [0x00142]

Проверих решението за Преобразуване на дати между календари в Xamarin.Android, но това предполага друга библиотека, която не ми е интересно да използвам. Промених свойствата за свързване в Android Project на None, Sdk Assembly Only и Sdk & User Assembly, но не работи. И така, как да конвертирате Григорианска дата в HijriDate във формуляри на Xamarin?

Добавих и следните кодове в метода OnCreate в Xamarin Android от Тайландски срив: Невалиден календар за дадената култура

_ = new System.Globalization.GregorianCalendar();
_ = new System.Globalization.HijriCalendar();
_ = new System.Globalization.PersianCalendar();
_ = new System.Globalization.UmAlQuraCalendar();
_ = new System.Globalization.ThaiBuddhistCalendar();

person ARH    schedule 30.11.2020    source източник
comment
forums.xamarin.com/discussion/128789/   -  person Russ J    schedule 01.12.2020


Отговори (2)


Опитайте да използвате System.DateTime:

Calendar hijiri = new HijriCalendar();
DateTime date = new DateTime(1442, 4, 15, hijiri);
Console.WriteLine(date.Year); // 2020
Console.WriteLine(date.Month);//11
Console.WriteLine(date.Day); // 30


Calendar gregorian = new GregorianCalendar();
DateTime d = new DateTime(2020, 11, 30, gregorian);
var year = hijiri.GetYear(d);  //1442
var month = hijiri.GetMonth(d);  //4
var day = hijiri.GetDayOfMonth(d);  //15

и друг начин е да използвате NodaTime.

person Leo Zhu - MSFT    schedule 01.12.2020
comment
Това работи, но резултатът ми се струва грешен. Резултатът трябва да бъде 1442,4,15 съответно за година, месец и ден. Моля, вижте islamicity.org/hijri-gregorian-converter - person ARH; 01.12.2020
comment
Вашият отговор и ръководството в тази връзка ми помагат да конвертирам HijriCalendar в Григориански и обратно. - person ARH; 01.12.2020
comment
@ARH Това е моя грешка. Просто илюстрирам един начин, не използвам правилната дата, можете да се обърнете към актуализацията по-горе. Ако ви е полезно, можете ли да го маркирате като приемлив отговор. - person Leo Zhu - MSFT; 02.12.2020

Намерих подобен проблем на тази връзка https://github.com/xamarin/Xamarin.Forms/issues/4037

// These classes won't be linked away because of the code,
// but we also won't have to construct unnecessarily either,
// hence the if statement with (hopefully) impossible
// runtime condition.
//
// This is to resolve crash at CultureInfo.CurrentCulture
// when language is set to Thai. See
// https://github.com/xamarin/Xamarin.Forms/issues/4037
if (Environment.CurrentDirectory == "_never_POSSIBLE_")
{
    new System.Globalization.ChineseLunisolarCalendar();
    new System.Globalization.HebrewCalendar();
    new System.Globalization.HijriCalendar();
    new System.Globalization.JapaneseCalendar();
    new System.Globalization.JapaneseLunisolarCalendar();
    new System.Globalization.KoreanCalendar();
    new System.Globalization.KoreanLunisolarCalendar();
    new System.Globalization.PersianCalendar();
    new System.Globalization.TaiwanCalendar();
    new System.Globalization.TaiwanLunisolarCalendar();
    new System.Globalization.ThaiBuddhistCalendar();
    new System.Globalization.UmAlQuraCalendar();
}

Късмет!

person WhiteBite    schedule 30.11.2020
comment
Проследих тази връзка и github.com/xamarin/Xamarin.Forms/issues/4037 (Добавих тези езици OnCreate метод в xamarin Android, но не работи) - person ARH; 01.12.2020