我有一个方法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";
答案 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);
}