为了表示今天的波斯语日期,我使用了以下代码…我工作的网站已经上线两个月前,它一直工作良好,但今天我收到以下错误:
Year、Month和Day参数描述了一个不可表示的DateTime。
我不知道为什么会这样…有办法解决这个问题吗?
protected void lbnChangeDate_Click(object sender, EventArgs e)
{
PersianCalendar p = new PersianCalendar();
DateTime date = DateTime.Now;
int year = p.GetYear(date);
int month = p.GetMonth(date);
int day = p.GetDayOfMonth(date);
DateTime d1 = new DateTime(year, month, day);
MultiView6.SetActiveView(View12);
txtDate.Text = DateTime.Parse(d1.ToString()).ToString("yyyy/MM/dd");
}
DateTime
不记得它们是如何创建的。因此,例如d1
不记得,在过去的某个时刻,你使用PersianCalendar
实例获得了3个int
s,然后在它的构造函数中使用它们。该构造函数(隐式地)假定您传递的是公历中的年、月和日。
然后,DateTime.Parse
不知道很久以前你访问了PersianCalendar
,并对它做了不适当的事情。
如果您想将波斯语日历日期显示为字符串,只需将其用作:
protected void lbnChangeDate_Click(object sender, EventArgs e)
{
PersianCalendar p = new PersianCalendar();
DateTime date = DateTime.Now;
txtDate.Text = string.Format("{0:0000}/{1:00}/{2:00}",
p.GetYear(date),
p.GetMonth(date),
p.GetDayOfMonth(date));
}
答案很好…现在我想更改在txtDate中给出的波斯语日期。将文本返回到常规日期以将其保存在数据库中。例如,我想将1393/05/05更改为2014/05/26,然后将其保存到数据库…我使用了以下代码,但是我遇到了在第一篇文章中讨论的相同问题…
date = Convert.ToDateTime(txtDate.Text);
string change = date.ToString("yyyy/MM/dd");
int day1 = Convert.ToInt32(change.Substring(8, 2));
int mon1 = Convert.ToInt32(change.Substring(5, 2));
int year1 = Convert.ToInt32(change.Substring(0, 4));
PersianCalendar pc = new PersianCalendar();
change = (pc.ToDateTime(year1, mon1, day1, 0, 0, 0, 0).ToString("yyyy/MM/dd").Substring(0, 10));
date = Convert.ToDateTime(change);
有办法解决这个问题吗?
异常错误发生在以下代码段:
System.DateTime.DateToTicks(Int32 year, Int32 month, Int32 day)
调用:
[__DynamicallyInvokable]
public DateTime(int year, int month, int day)
{
this.dateData = (ulong) DateTime.DateToTicks(year, month, day);
}
这段代码是这样的:
private static long DateToTicks(int year, int month, int day)
{
if (year >= 1 && year <= 9999 && (month >= 1 && month <= 12))
{
int[] numArray = DateTime.IsLeapYear(year) ? DateTime.DaysToMonth366 : DateTime.DaysToMonth365;
if (day >= 1 && day <= numArray[month] - numArray[month - 1])
{
int num = year - 1;
return (long) (num * 365 + num / 4 - num / 100 + num / 400 + numArray[month - 1] + day - 1) * 864000000000L;
}
}
throw new ArgumentOutOfRangeException((string) null, Environment.GetResourceString("ArgumentOutOfRange_BadYearMonthDay"));
}
该方法抛出异常的唯一方式是年小于1或大于9999且月不在1到12之间。所以我建议你确保你传递的是有效的日期。