Подтвердить что ты не робот

Преобразование даты с персидского в григорианский

Как преобразовать персидскую дату в григорианскую дату с помощью System.globalization.PersianCalendar? Обратите внимание, что я хочу преобразовать свою Персидскую Дату (например, сегодня 1391/04/07) и получить результат Грегорианской даты, который в этом случае будет 27 июня 2012 года. Я подсчитываю секунды для ответа...

4b9b3361

Ответ 1

Это довольно просто:

// I'm assuming that 1391 is the year, 4 is the month and 7 is the day
DateTime dt = new DateTime(1391, 4, 7, persianCalendar);
// Now use DateTime, which is always in the Gregorian calendar

Когда вы вызываете конструктор DateTime и передаете его в Calendar, он преобразует его для вас - поэтому dt.Year будет в этом случае в 2012 году. Если вы хотите пойти другим путем, вам нужно построить соответствующий DateTime, затем использовать Calendar.GetYear(DateTime) и т.д.

Короткая, но полная программа:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        PersianCalendar pc = new PersianCalendar();
        DateTime dt = new DateTime(1391, 4, 7, pc);
        Console.WriteLine(dt.ToString(CultureInfo.InvariantCulture));
    }
}

Это печатает 06/27/2012 00:00:00.

Ответ 2

Что вам нужно сделать, так это просто определить календарь в определении:

 DateTime dt = new DateTime(year, mon, day, new PersianCalendar());

Ответ 3

Вы можете использовать этот код для преобразования персидской даты в григорианский.

// Persian Date
var value = "1396/11/27";
// Convert to Miladi
DateTime dt = DateTime.Parse(value, new CultureInfo("fa-IR"));
// Get Utc Date
var dt_utc = dt.ToUniversalTime();

Ответ 4

У меня есть метод расширения для этого:

  public static DateTime PersianDateStringToDateTime(this string persianDate)
  {
        PersianCalendar pc = new PersianCalendar();

        var persianDateSplitedParts = persianDate.Split('/');
        DateTime dateTime = new DateTime(int.Parse(persianDateSplitedParts[0]), int.Parse(persianDateSplitedParts[1]), int.Parse(persianDateSplitedParts[2]), pc);
        return DateTime.Parse(dateTime.ToString(CultureInfo.InvariantCulture));
  }

Пример: преобразование 1398/07/05 в 2019/09/27