【发布时间】:2014-05-27 08:21:22
【问题描述】:
我使用以下代码将波斯日期更改为公历日期。例如,它将 1393/05/05 更改为 2014/05/26。
if (MultiView6.ActiveViewIndex == 1)
{
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);
}
但是对于某些特殊日期,例如 1393/02/29,代码停止工作,并且我从代码的第一行收到上述错误:
String was not recognized as a valid DateTime.
如果我想将 2014/05/19 转换为波斯日期(即 1393/02/29),我想我会遇到同样的问题.... 有没有办法解决这个错误?
【问题讨论】:
-
为什么在这里将 DateTime 转换为 String 然后又转换回 DateTime:
DateTime.Parse(d1.ToString())? -
如果我省略了那部分,它不会给我网站所需的 yyyy/mm/dd 格式
-
不,你只需要
d1.ToString("yyyy/MM/dd")。如果您当前的文化有不同的日期分隔符但您想强制执行/,则必须使用InvariantCulture:d1.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture) -
您不能将当前年份转换为波斯年份,然后使用它来创建非波斯日期时间。公历中的 1393 年不是闰年,这就是您收到该错误的原因。
-
我从第一行得到错误:date = Convert.ToDateTime(txtDate.Text);