ฉันทำงานหลายโครงการที่มีการแปลงวันที่ ตัวอย่างเช่นฉันทำงานในปฏิทินสุริยคติและวิธีแปลงให้เป็นวันที่แบบคริสต์ศักราชและในทางกลับกัน ปฏิทินสุริยคติ (ปฏิทินเปอร์เซีย) เกือบจะคล้ายกับวันที่แบบคริสต์ศักราชในแง่ของจำนวนวันในหนึ่งปี [ก้าวกระโดดหรือไม่]
แต่เมื่อเร็ว ๆ นี้ฉันได้ทำงานในโครงการที่มีปฏิทินจันทรคติ ขณะที่ฉันค้นคว้าเกี่ยวกับปฏิทินจันทรคติฉันก็ตระหนักว่าไม่มีวิธีการทางตรรกะเดียวในการแปลงระบบจันทรคติเป็นพลังงานแสงอาทิตย์ (อย่างน้อยเท่าที่ฉันรู้)
นี่คือลิงค์อ้างอิงบางส่วนที่ฉันค้นคว้าเกี่ยวกับพวกเขา:
- ไม่สามารถแปลงจาก Hijri Date เป็น Gregorian date (c #)
- แปลงวันที่จาก Hijri Calendar เป็น Gregorian Calendar และในทางกลับกัน
- วันที่ฮิจเราะห์ให้กับเกรกอเรียนโดยใช้ 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
Hijri gregorian-Converter
Islamic Date Converter - Gregorian Calendar Converter
ดังนั้นฉันไม่รู้ว่ามีอัลกอริทึมจริง ๆ ในการแปลงวันที่ฮิจเราะห์เป็นเกรกอเรียน
ขอบคุณล่วงหน้าสำหรับเวลาของคุณ
สำหรับข้อมูลเพิ่มเติม https://www.wikiwand.com/simple/Islamic_calendar
อัปเดต : ฉันรู้ว่าไม่มีไลบรารีที่ถูกต้องสำหรับความรู้ แต่ถ้าใครมีความรู้หรือรายละเอียดเกี่ยวกับปฏิทินฮิจเราะห์ (อินเทอร์เฟซทั้งหมด) โปรดอธิบายที่นี่ฉันต้องการปรับใช้ปฏิทินฮิจเราะห์สำหรับทุกคน
October 30, 2019 wed
October 29, 2019 tue
ฉันลองแล้ว
Omar khayyam
นักคณิตศาสตร์ชาวเปอร์เซีย ปฏิทินเปอร์เซียมี 365 วัน (366 ในปีอธิกสุรทิน) แต่ปฏิทินจันทรคตินั้นน้อยกว่าปฏิทินเปอร์เซีย 11-12 วัน