4

how do I fix the Hijri calendar being 1 day too early?

Today, my-time = 23 July, 2013 Tuesday
And the Islamic calendar time = 14 Ramadan, 1434 (according to this

My calendar is showing 15 Ramadan instead of 14. However I'm not sure whether it is my fault or the site's fault. Anyone can confirm today's Ramadan date?

lblgreg.Text = DateTime.Today.ToString("dd/MM/yyyy");

Today's date:

DateTime today = DateTime.Today;

Conversion of Gregorian calendar to Hibri:

CultureInfo Hijri = CultureInfo.CreateSpecificCulture("ar-SA");

        string datetoday_day = today.ToString("dd", Hijri);
        string datetoday_month = today.ToString("MM", Hijri);
        string datetoday_year = today.ToString("yyyy", Hijri);

        int month_check = int.Parse(datetoday_month);

Switch statement for value of months to be switch to text-month:

switch (month_check) {
            case 01:
                {
                    lbldate.Text  = datetoday_day + " Muharram " + datetoday_year;
                    break;
                }
            case 02:
                {
                    lbldate.Text = datetoday_day + " Safar " + datetoday_year;
                    break;
                }
            case 03:
                {
                    lbldate.Text = datetoday_day + " Rabi Al-Awwal " + datetoday_year;
                    break;
                }
            case 04:
                {
                    lbldate.Text = datetoday_day + " Rabi Al-Akhar " + datetoday_year;
                    break;
                }
            case 05:
                {
                    lbldate.Text = datetoday_day + " Jumada Al-Awwal " + datetoday_year;
                    break;
                }
            case 06:
                {
                    lbldate.Text = datetoday_day + " Jumada Al-Akhirah " + datetoday_year;
                    break;
                }
            case 07:
                {
                    lbldate.Text = datetoday_day + " Rajab " + datetoday_year;
                    break;
                }
            case 08:
                {
                    lbldate.Text = datetoday_day + " Shaban " + datetoday_year;
                    break;
                }
            case 09:
                {
                    lbldate.Text = datetoday_day + " Ramadan " + datetoday_year;
                    break;
                }
            case 10:
                {
                    lbldate.Text = datetoday_day + " Shawwal " + datetoday_year;
                    break;
                }
            case 11:
                {
                    lbldate.Text = datetoday_day + " Dhul-Qadah " + datetoday_year;
                    break;
                }
            case 12:
                {
                    lbldate.Text = datetoday_day + " Dhul-Hijjah " + datetoday_year;
                    break;
                }
        }
Belzelga
  • 143
  • 1
  • 5
  • 16
  • Offtopic - but you should consider setting a local month variable that will change in your switch statement, and then set the lbl text after the switch **Edit** I also found [this class](http://msdn.microsoft.com/en-us/library/system.globalization.hijricalendar.aspx) which may help you even more with all the conversion – Sayse Jul 23 '13 at 06:51

3 Answers3

6

Use UmAlQuraCalendar instead.

var UmAlQuraCalendar = new UmAlQuraCalendar();
CultureInfo Hijri = new CultureInfo("ar-SA")  
{ 
    DateTimeFormat = { Calendar = UmAlQuraCalendar } 
};
shA.t
  • 16,580
  • 5
  • 54
  • 111
Faisal
  • 623
  • 6
  • 11
  • default Calendar of culture "ar-SA" is UmAlQuraCalendar. Explicitly specifying UmAlQuraCalendar won't make a difference. – Ahmed May 05 '16 at 10:01
2

use HijriAdjustment and set it between -2 to 2 like this

System.Globalization.HijriCalendar hej = new System.Globalization.HijriCalendar();
    hej.HijriAdjustment =-2;
hmfarimani
  • 531
  • 1
  • 8
  • 13
  • default Calendar of culture "ar-SA" for which the questions has been asked is System.Globalization.UmAlQuraCalendar which is not the same as System.Globalization.HijriCalendar. – Ahmed May 05 '16 at 10:00
0

Check code below

using System.Globalization;
//.......
var arDateTimeFormat= new CultureInfo("ar").DateTimeFormat;
arDateTimeFormat.Calendar = new HijriCalendar { HijriAdjustment = -1}; //set HijriAdjustment between -2 to 2
arDateTimeFormat.AbbreviatedMonthNames = new []{"Muharram", "Safar", "Rabi Al-Awwal", "Rabi Al-Akhar", "Jumada Al-Awwal", "Jumada Al-Akhirah", "Rajab", "Shaban", "Ramadan", "Shawwal", "Dhul-Qadah", "Dhul-Hijjah", string.Empty};
lbldate.Text = DateTime.Now.ToString("dd MMM, yyyy", arDateTimeFormat);
Taha Azab
  • 34
  • 4