【问题标题】:change persian date to gregorian date and vice versa将波斯日期更改为公历日期,反之亦然
【发布时间】: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")。如果您当前的文化有不同的日期分隔符但您想强制执行/,则必须使用InvariantCultured1.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture)
  • 您不能将当前年份转换为波斯年份,然后使用它来创建非波斯日期时间。公历中的 1393 年不是闰年,这就是您收到该错误的原因。
  • 我从第一行得到错误:date = Convert.ToDateTime(txtDate.Text);

标签: c# asp.net date


【解决方案1】:

yearmonthdayPersianCalendar 中,您不能在 DateTime 中使用它们。如果你想从PersianCalendar 转换为DateTime,你必须这样做:

DateTime d1=p.ToDateTime(year, month, day, 0, 0, 0, 0);

================================================ ======

在您的新代码中,您还有另一个错误。变量day1mon1year1 在公历中,您不能在PersianCalendar.ToDateTime() 中使用它们。

【讨论】:

  • 这在某种程度上有所帮助,但我的代码的第一行仍然出现错误...我在新的代码中编辑了代码...您可以查看一下吗?
  • @sara.y 是的,正如人们所说,它不会将波斯日期字符串转换为 DateTime 对象/
  • 所以没有其他方法可以将波斯日期更改为公历?...我应该自己编写代码?
【解决方案2】:

您只需要使用接受Calendar - DateTime(int year, int month, int day, Calendar calendar) 的构造函数。

string persianDateString = "1393/02/29";
string[] persianDateParts = persianDateString.Split('/');
int persianYear = int.Parse(persianDateParts[0]);
int persianMonth = int.Parse(persianDateParts[1]);
int persianDay = int.Parse(persianDateParts[2]);
PersianCalendar pc = new PersianCalendar();
DateTime date = new DateTime(persianYear, persianMonth, persianDay, pc);

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 2023-03-30
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2020-10-28
    • 2014-09-19
    相关资源
    最近更新 更多