我使用以下代码来呈现今天的波斯日期...我工作过的网站自两个月前开始上线,但它工作正常,但今天我收到了以下错误:
年,月和日参数描述了无法表示的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");
}
答案 0 :(得分:7)
DateTime
不记得它们是如何创建的。所以,例如d1
并不记得,在过去的某个时刻,您使用PersianCalendar
实例获取3 int
s,然后在其构造函数中使用它们。那constructor(隐含地)假设你从格里高利历中经过了几年,几个月和几天。
然后,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));
}
答案 1 :(得分:1)
答案很有效...现在我想将txtDate.Text中给出的波斯日期更改回常规日期以将其保存在数据库中。例如我想将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);
有没有办法解决这个问题?
答案 2 :(得分:1)
此代码段发生异常错误:
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之间。所以我建议您确保传递有效日期。