{"Параметры Год, Месяц и День описывают проблему непредставляемого формата DateTime."} - PullRequest
0 голосов
/ 15 июня 2019

У меня есть метод PersianDateToGregorianDate, который я использую вместо Convert.todatetime для вставки моей персидской даты, и у меня есть метод расширения (ToPersianDate) для просмотра и преобразования моей даты в персидскую дату в моем gridView.Но я получаю эту ошибку:

Параметры Year, Month и Day описывают непредставляемый DateTime

, когда я ввожу datetime, например 31/2/1398, ив этом месяце у нас есть 31 день:)

Это мой PersianDateToGregorianDate метод (работает правильно):

public static DateTime PersianDateToGregorianDate(string pDate)
        {
            var dateParts = pDate.Split(new[] { '/' }).Select(d => int.Parse(d)).ToArray();
            var hour = 0;
            var min = 0;
            var seconds = 0;
            return new DateTime(dateParts[2], dateParts[1], dateParts[0],
                                hour, min, seconds, new PersianCalendar());
        }

И это мой ToPersianDate метод расширения (я получил ошибку в этом методе):

public static DateTime ToPersianDate(this DateTime dt)
        {
            PersianCalendar pc = new PersianCalendar();
            int year = pc.GetYear(dt);
            int month = pc.GetMonth(dt);
            int day = pc.GetDayOfMonth(dt);
            int hour = pc.GetHour(dt);
            int min = pc.GetMinute(dt);

            return new DateTime(year, month, day, hour, min, 0);
        }

и я меняю формат даты в DataGridView при загрузке формы:

dataGridView1.Columns[5].DefaultCellStyle.Format = "dd/MM/yyyy";
        dataGridView1.Columns[4].DefaultCellStyle.Format = "dd/MM/yyyy";

1 Ответ

2 голосов
/ 15 июня 2019

Нельзя установить значение 31 для месяца февраля в переменной DateTime. Вы можете сохранить свою дату в переменной DateTime и не беспокоиться о внутреннем представлении этой даты. Когда вам нужно отобразить персидскую дату, вы можете просто позвонить:

public static string ToPersianDate(this DateTime dt)
{
    CultureInfo ci = new CultureInfo("fa-Ir");
    return dt.ToString(ci);
}

Также, если вам нужно отобразить дату в DataGridView, я думаю, вы должны установить свойство FormatProvider в Persian CultureInfo.

Сейчас я не могу проверить это, но вы можете попробовать

CultureInfo ci = new CultureInfo("fa-Ir");
dataGridView1.Columns[5].DefaultCellStyle.FormatProvider = ci;
dataGridView1.Columns[5].DefaultCellStyle.Format = "dd/MM/yyyy";
dataGridView1.Columns[4].DefaultCellStyle.FormatProvider = ci;
dataGridView1.Columns[4].DefaultCellStyle.Format = "dd/MM/yyyy";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...