{“ Year,Month和Day参数描述了无法表示的DateTime。”}格式问题

时间:2019-06-15 14:35:32

标签: c# winforms

我有一个方法PersianDateToGregorianDate,而不是Convert.todatetime用于插入波斯日期时间,并且我有一个扩展方法(ToPersianDate),用于查看日期时间并将其转换为我的gridView中的波斯语日期。但我收到此错误:

  

年,月和日参数描述了无法表示的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 个答案:

答案 0 :(得分:2)

您不能在DateTime变量中为2月设置31。您可以将日期保留在DateTime变量中,不必担心该日期的内部表示。当您需要显示波斯语日期时,您可以致电:

session_start();
include "conn.php";

$language = $_POST["language"];
$model = $_SESSION["model"];

echo "<table border=1>"; 
$result = mysqli_query($conn,"SELECT * FROM label WHERE model = '$model'");
while ($row = $result->fetch_assoc()){
    echo "<tr><td><h1>" . $row["model"] . "</h1></td>";
    echo "<td></td></tr>";
    echo "<tr><td><img src='pix/" . $row["pix"] . "'></td>";
    echo "<td>";

switch ($language){
    case "english":
    $langcode1="gb";
    $langcode2="en";
    $langcode3="-en";
    break;
case "french":
    $langcode1="fr";
    $langcode2="fr";
    $langcode3="-fr";
    break;
/* and so on.. */
}

/*cutting some code with the manipulation on the strings based on the language */

echo "<a href='" . $manual . "' target='_blank'>Manual</a><br>";
echo "<a href='" . $row["specsheet"] . "' target='_blank'>Specification Sheet</a><br>";

}
echo "</td></tr>";
echo "</table>";

另外,如果您需要在DataGridView中显示日期,我认为您应该将FormatProvider属性设置为波斯文化。

我目前无法测试,但您可以尝试

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