Mam pracę nad wieloma projektami z konwersjami daty. na przykład pracuję nad kalendarzem słonecznym i jak przekonwertować je na daty gregoriańskie i odwrotnie. Kalendarz słoneczny (kalendarz perski) jest prawie podobny do daty gregoriańskiej pod względem liczby dni w roku [skok lub nie].
Ale ostatnio pracowałem nad projektem z kalendarzem księżycowym. Podczas badań kalendarza księżycowego zdałem sobie sprawę, że nie ma żadnej logicznej metody konwersji układu księżycowego na słoneczny (przynajmniej o ile mi wiadomo).
Oto kilka odnośników, które na nich badałem:
- Nie można przekonwertować z daty Hidżry na datę gregoriańską (c #)
- Konwertuj datę z kalendarza Hidżry na kalendarz gregoriański i odwrotnie
- Data Hidżry Do gregoriańskiego przy użyciu DateTime.Parse
- Konwertuj datę Hidżry na dane gregoriańskie
Idąc za powyższymi linkami, szkoląc i testując przedstawione algorytmy, zauważyłem, że żaden z nich nie jest absolutnie poprawny.
Wystarczy powiedzieć, wystarczy przekonwertować "1441/02/30" [Safar 30th]
na datę gregoriańską, którą każdą metodę chcesz wypróbować.
Poniższy obraz jest pomocny dla wyżej wspomnianego przykładu.
Umieściłem tutaj niektóre kody testowe i nie udało mi się:
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();
Błąd powyższego kodu:
DateTime reprezentowana przez ciąg nie jest obsługiwana w kalendarzu System.Globalization.HijriCalendar.
HijriCalendar hc = new HijriCalendar();
DateTime date = new DateTime(1441, 2, 30, hc);
return date.ToString();
Błąd powyższego kodu:
„Dzień musi wynosić od 1 do 29 dla miesiąca 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();
Błąd powyższego kodu:
„Dzień musi wynosić od 1 do 29 dla miesiąca 2.”
Po tym starałem się zrozumieć, czy istnieje jakiś algorytm do wdrożenia konwersji daty Hijri na datę gregoriańską?
Testuję więc islamski internetowy konwerter dat i jestem zaskoczony!
Po prostu spróbuj wpisać "1441/2/30"
oba konwertery dat.
pierwszy powraca October 30, 2019
I drugi powraca 29 October 2019
Hijri konwerter gregoriański Islamski konwerter
daty - konwerter kalendarza gregoriańskiego
Nie wiem więc, czy istnieje jakiś prawdziwy algorytm do konwersji dat Hidżry na gregoriański.
Z góry dziękuję za poświęcony czas.
Aby uzyskać więcej informacji, https://www.wikiwand.com/simple/Islamic_calendar
Aktualizacja : Wiem, że nie ma żadnej poprawnej biblioteki. ale jeśli ktoś ma wiedzę lub szczegółowe informacje na temat kalendarza Hidżry (cały jego interfejs), proszę po prostu opisz tutaj. Naprawdę chcę wdrożyć kalendarz Hidżry dla wszystkich.
October 30, 2019 wed
lubOctober 29, 2019 tue
. Próbowałem teraz.Omar khayyam
perskiego matematyka. Perski kalendarz ma 365 dni (366 w roku przestępnym), ale kalendarz księżycowy jest o 11-12 dni mniejszy niż kalendarz perski.Odpowiedzi:
Możesz użyć czegoś takiego jak ten kod do konwersji i parsowania ciągów kalendarza hidżry na gregoriański DateTime.
źródło
Day must be between 1 and 29 for month 2. Parameter name: day
. Jak argumentowaliśmy wcześniej w moich komentarzach do wpisu, Safar innego miesiąca Hijri (księżycowego) ma zmienną liczbę dni. twoje rozwiązanie ma ten sam błąd podobny do innych rozwiązań.