如何转换Gregorian到Shamsi的日期

时间:2017-01-28 15:30:32

标签: c# datetime datagridview

我从IS TRUE获取日期(格里高利),并将它们放在IS TRUE中,以便我可以在SqlServer中显示,

但在我在DGV中展示它们之前,我必须将它们转换为datatable中的Shamsi,

首先我通过这种方法做到这一点:

datagridview

此代码:

datatable

然后将public string PersianDate(DateTime DateTime1) { PersianCalendar PersianCalendar1 = new PersianCalendar(); return string.Format(@"{0}/{1}/{2}", PersianCalendar1.GetYear(DateTime1), PersianCalendar1.GetMonth(DateTime1), PersianCalendar1.GetDayOfMonth(DateTime1)); } 设置为DGV,

但它以MM / dd / yyyy格式给出时间,我想要dd / MM / yyyy

所以我将此部分添加到foreach (DataRow DR in Dtable.Rows) { DateTime dt = Convert.ToDateTime(DR["VisitDate"]); string Pdate = PersianDate(dt); DR["VisitDate"] = Pdate; }

datatable

并且有效。

但是在某些日子里,例如2017年3月20日(2013年12月30日)=>叶年,  甚至在2016年3月19日(29/12/1398)=>不是叶年

它给了我错误:

  

字符串未被识别为有效的DateTime.Couldn&t't< 29/12/1398>在VisitDate专栏中。预期类型是DateTime。

那么如何在dd / MM / yyyy格式中正确显示我的日期而没有任何可能的错误?

抱歉这个长问题

2 个答案:

答案 0 :(得分:2)

感谢评论中的提示。删除了不必要的字符串转换。

foreach (DataRow DR in Dtable.Rows)
{
    DateTime dt = Convert.ToDateTime(DR["VisitDate"]);

    PersianDateLibrary.PerCalander Per = new PersianDateLibrary.PerCalander();

    DateTime ct = Convert.ToDateTime(Per.
    GetPersianDate(dt, PersianDateLibrary.PerCalander.DateFormat.Short));

    DR["VisitDate"] = ct;
}

dgv列中绑定数据格式之前,请执行以下操作:

dgv.Columns[2].DefaultCellStyle.Format = "yyyy/MM/dd";

答案 1 :(得分:1)

您可以简单地使用Persia.NET Core,这是一个将波斯,格里高利和阿拉伯(Hijri)日期彼此转换的类库。

将格里高里格语转换为Shamsi

Persia.SolarDate solarDate = Persia.Calendar.ConvertToPersian(DateTime.Now);
// getting the simple format of persian date
string str = solarDate.ToString();

将Shamsi转换为公历

DateTime ConvertToGregorian(SolarDate solarDate)
DateTime ConvertToGregorian(LunarDate lunarDate)
DateTime ConvertToGregorian(int year, int month, int day, DateType dateType)
DateTime ConvertToGregorian(int year, int month, int day, int hour, int minute, int
second, DateType dateType)

可以从here

下载该库