У меня есть работа над многими проектами с конвертированными датами. например, я работаю над солнечным календарем и как конвертировать их в григорианские даты и наоборот. Солнечный календарь (персидский календарь) почти аналогичен григорианской дате с точки зрения количества дней в году [прыжок или нет].
Но недавно я работал над проектом с лунным календарем. Когда я исследовал Лунный календарь, я понял, что не существует единого логического метода для преобразования лунной системы в солнечную (по крайней мере, насколько я знаю).
Вот несколько ссылок, которые я исследовал на них:
- Невозможно преобразовать дату хиджры в григорианскую дату (c #)
- Конвертировать дату из календаря хиджры в григорианский календарь и наоборот
- Хиджры Дата Для григорианского использования DateTime.Parse
- Перевести даты хиджры в григорианские дат
Следуя приведенным выше ссылкам, обучая и тестируя людей, представляющих алгоритмы, я заметил, что ни одна из них не является абсолютно правильной.
Достаточно сказать, просто конвертировать "1441/02/30" [Safar 30th]
в григорианскую дату каждый метод, который вы хотите попробовать.
Следующее изображение полезно для вышеупомянутого примера.
Я положил здесь некоторые тестовые коды и не проходит:
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();
Ошибка для вышеуказанного кода:
«День должен быть от 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».
После этого я пытался понять, есть ли какой-нибудь алгоритм развертывания конвертированной даты хиджры в григорианскую дату?
Итак, я протестировал какой-то исламский онлайн конвертер дат, и я удивился!
Просто попробуйте ввести "1441/2/30"
оба конвертера даты.
первый возвращается October 30, 2019
а второй возвращается 29 October 2019
хиджри григорианский-конвертер
григорианский исламский конвертер дат - конвертер григорианского календаря
Так что я не знаю, существует ли какой-нибудь реальный алгоритм для преобразования дат Хиджры в григорианский.
Спасибо заранее за ваше время.
Для получения дополнительной информации, https://www.wikiwand.com/simple/Islamic_calendar
Обновление : я знаю, что нет никакой правильной библиотеки для знания. но если у кого-то есть знания или подробности о календаре хиджры (весь его интерфейс), пожалуйста, просто опишите здесь, я действительно хочу развернуть календарь хиджри для всех.
October 30, 2019 wed
илиOctober 29, 2019 tue
. Я попробовал сейчас.Omar khayyam
персидским математиком. Персидский календарь имеет 365 дней (366 в високосный год), но лунный календарь на 11-12 дней меньше, чем персидский календарь.Ответы:
Вы можете использовать что-то вроде этого кода для преобразования и анализа строк календаря хиджры в григорианский DateTime.
источник
Day must be between 1 and 29 for month 2. Parameter name: day
. Как мы уже говорили в комментариях к моему сообщению, в сафаре другого хиджрского (лунного) месяца количество переменных дней различно. Ваше решение имеет такую же ошибку, как и другие решения.