У меня есть работа над многими проектами с конвертированием дат. например, я работаю над солнечным календарем и как конвертировать их в григорианские даты и наоборот. Солнечный календарь (персидский календарь) почти аналогичен григорианской дате по количеству дней в году [прыжок или нет].
Но недавно я работал над проектом с лунным календарем. Изучая лунный календарь, я понял, что не существует единого логического метода преобразования лунной системы в солнечную (по крайней мере, насколько я знаю).
Вот несколько ссылок, которые я исследовал на них:
- Невозможно преобразовать дату хиджры в григорианскую дату (c#)
- преобразовать дату из календаря хиджры в григорианский Календарь и наоборот
- Дата хиджры Для григорианского использования DateTime.Parse
- Преобразование даты хиджры в григорианские данные
По мере того, как я следовал вышеупомянутым ссылкам, обучая и тестируя людей, представлял алгоритмы, я заметил, что ни одно из них не является абсолютно правильным.
Достаточно сказать, просто конвертируйте "1441/02/30" [Safar 30th]
в григорианскую дату для каждого метода, который вы хотите попробовать.
Следующее изображение полезно для вышеупомянутого примера. ![enter image description here](https://i.stack.imgur.com/QnarV.png)
Я положил сюда несколько тестовых кодов и провал:
CultureInfo arSA = new CultureInfo("ar-SA");
arSA.DateTimeFormat.Calendar = new HijriCalendar();
var dateValue = DateTime.ParseExact("1441/02/30", "yyyy/MM/dd", arSA);
return dateValue.ToString();
Ошибка выше Код:
DateTime, представленный строкой, не поддерживается в календаре System.Globalization.HijriCalendar.
HijriCalendar hc = new HijriCalendar();
DateTime date = new DateTime(1441, 2, 30, hc);
return date.ToString();
The ошибка для вышеуказанного кода:
"День должен быть между 1 и 29 для месяца 2."
string hijri = "1441/2/30";
HijriCalendar hc = new HijriCalendar();
int year = int.Parse(hijri.Substring(0, 4));
string rem = hijri.Remove(0, 5);
int end = rem.IndexOf('/', 0);
int month = int.Parse(rem.Substring(0, end));
rem = rem.Remove(0, end + 1);
int day = int.Parse(rem);
DateTime date = new DateTime(year, month, day, hc);
return date.ToShortDateString();
Ошибка для приведенного выше кода:
«День должен быть от 1 до 29 для месяца 2».
После этого я пытался понять, что Есть ли какой-нибудь алгоритм для развертывания конвертированной даты хиджры в григорианскую дату?
Итак, я тестирую онлайн-конвертер ислами c, и я удивился!
Просто попробуйте ввести "1441/2/30"
на обоих конвертерах даты.
первый возвращается October 30, 2019
И второй возвращается 29 October 2019
Hijri gregorian-converter
Islami c Преобразователь даты - конвертер григорианского календаря
Так что я не знаю, существует ли какой-либо реальный алгоритм для преобразования дат хиджры в григорианский.
Заранее спасибо за ваше время.
Для получения дополнительной информации, https://www.wikiwand.com/simple/Islamic_calendar
Обновление : я знаю, что не существует правильной библиотеки для информации. но если у кого-то есть знания или сведения о календаре хиджры (весь его интерфейс), просто опишите здесь, я действительно хочу развернуть календарь хиджри для всех.