11

現在、私はイスラム暦の日付を扱っており、次のコードを使用してそれらをグレゴリオ暦の日付に変換しようとしています:

string HijriDate;
string[] allFormats ={"yyyy/MM/dd","yyyy/M/d",
    "dd/MM/yyyy","d/M/yyyy",
    "dd/M/yyyy","d/MM/yyyy","yyyy-MM-dd",
    "yyyy-M-d","dd-MM-yyyy","d-M-yyyy",
    "dd-M-yyyy","d-MM-yyyy","yyyy MM dd",
    "yyyy M d","dd MM yyyy","d M yyyy",
    "dd M yyyy","d MM yyyy","MM/dd/yyyy"};
CultureInfo enCul = new CultureInfo("en-US");
CultureInfo arCul = new CultureInfo("ar-SA");
arCul.DateTimeFormat.Calendar = new System.Globalization.HijriCalendar(); 
DateTime tempDate = DateTime.ParseExact(HijriDate, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString("MM/dd/yyyy");

このコードは、次のような月の 30 日を除くすべての日付で正常に機能しています。

30/10/143330/12/1432など、30/05/1433対応するグレゴリオ暦でその日付を処理および変換する方法

4

3 に答える 3

9

これがこのコードで現在うまく機能しているコードです。関数から日付を文字列としてdatetimeではなく文字列として返していますが、文字列の代わりにreturndatetimetypeを使用するだけです。

public string ConvertDateCalendar(DateTime DateConv, string Calendar, string DateLangCulture)
{
    System.Globalization.DateTimeFormatInfo DTFormat;
    DateLangCulture = DateLangCulture.ToLower();
    /// We can't have the hijri date writen in English. We will get a runtime error - LAITH - 11/13/2005 1:01:45 PM -

    if (Calendar == "Hijri" && DateLangCulture.StartsWith("en-"))
    {
        DateLangCulture = "ar-sa";
    }

    /// Set the date time format to the given culture - LAITH - 11/13/2005 1:04:22 PM -
    DTFormat = new System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat;

    /// Set the calendar property of the date time format to the given calendar - LAITH - 11/13/2005 1:04:52 PM -
    switch (Calendar)
    {
        case "Hijri":
            DTFormat.Calendar = new System.Globalization.HijriCalendar();
            break;

        case "Gregorian":
            DTFormat.Calendar = new System.Globalization.GregorianCalendar();
            break;

        default:
            return "";
    }

    /// We format the date structure to whatever we want - LAITH - 11/13/2005 1:05:39 PM -
    DTFormat.ShortDatePattern = "dd/MM/yyyy";
    return (DateConv.Date.ToString("f", DTFormat));
}

ここでこのメソッドを呼び出すには、例を示します

ltrCalValue.Text = ConvertDateCalendar(CalHijri.SelectedDate, "Gregorian", "en-US");

イスラム暦を呼び出すには

ltrCalValue.Text = ConvertDateCalendar(CalHijri.SelectedDate, "Hijri", "en-US");
于 2013-01-26T14:35:57.037 に答える
0

1 か月の 1 日の最大値は次のように計算できます。DateTime.DaysInMonth(year, month)

このように使用します

int result = DateTime.DaysInMonth(2012, 2); // returns 29 being a leap year

しかし

int result = DateTime.DaysInMonth(2011, 2) // returns 28 being a non-leap year
于 2012-06-25T13:01:41.883 に答える
-1

ヒルジの 10 か月目と 12 か月目には 30 日がないため、その日付は無効です。

于 2012-06-25T13:07:22.960 に答える