2017-01-28 47 views
1

我從SqlServer日期(以公曆),並把它們放在一個datatable這樣我就可以顯示它在datagridview如何日期從公曆轉換爲沙姆西

但在此之前我告訴他們在DGV,我有將它們轉換成沙姆西在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)); 

} 

而這種代碼:

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

,然後設置datatable到DGV,

但它提供了一次在MM/dd/yyyy格式,我想DD/MM/YYYY

所以這部分增加foeach loop

foreach (DataRow DR in Dtable.Rows) 
{ 
    DateTime dt = Convert.ToDateTime(DR["VisitDate"]); 
    string Pdate = PersianDate(dt); 
    DR["VisitDate"] = Convert.ToDateTime(Pdate).ToString("dd/MM/yyyy"); 
} 

它工作。

但在某些日子像2017年3月20日(30/12/1395)=>葉以來, 甚至在2020年3月19日(29/12/1398)=>不是葉一年

它給我的錯誤:

字符串未被識別爲有效DateTime.Couldn't店< 29/12/1398>在VisitDate列。預期的類型是DateTime。

那麼如何以dd/MM/yyyy格式正確顯示我的日期而沒有任何可能的錯誤?

抱歉這個長期問題

+1

我不t知道很多波斯日期系統,所以我不能完全回答你的問題,但我注意到你做了很多不必要的字符串轉換(例如,'PersianDate'返回一個字符串而不是某種日期數據類型)。 **不要爲日期**使用字符串,總是使用特定的類型(例如'DateTime'和任何用於存儲波斯日期的內容),所有問題都將立即消失。如果您想以某種格式顯示日期,請使用[您的UI控件的格式化選項](https://msdn.microsoft.com/zh-cn/library/f9x2790s(v = vs.110).aspx) 。 – Heinzi

+0

@Heinzi坦克,我刪除了不必要的字符串轉換,並獲得日期格式的波斯日期,但仍然想在ddg/yyyy中顯示它們在dgv中,我不知道如何,(dgv是數據有界) – SaraniO

+0

您可以格式化DGV列。 – jdweng

回答

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"; 
相關問題