2012-06-01 231 views
2

我發現每個DateTime格式都可以想到,除了我需要的格式:yyyymm。我該如何着手解決這個問題?日期時間格式yyyymm

我有下面的代碼我的工作:

List <string> routines = new List<string>(); 
routines.Add("1 - Routine"); 
routines.Add("6 - Planned Outage"); 

int year = 2011; 
int quarter = 1; 

DateTime timeframe = new DateTime(year, (quarter * 3), 01).AddMonths(1); 

var results = 

    (from wo in WORKORDERs 

     join wot in WORKORDERTYPEs on wo.Wot_oi equals wot.Wotyoi 

     join pri in PRIORITies on wo.Prio_oi equals pri.Priooi 

     join s in SITEs on wo.BEparn_oi equals s.Siteoi 

    where wo.Audt_created_dttm.Value.Year >= year - 3 && wo.Audt_created_dttm.Value.Year >= 2006 
     && wo.Audt_created_dttm < timeframe && (s.Id =="NM" || s.Id == "TH") && 
     !wot.Id.Contains("stand") && !(wo.Ci_cnc_date != null && pri.Prioid != "1 - Routine" && 
     pri.Prioid != "6 - Planned Outage") && (SqlMethods.Like(pri.Prioid, "1%") || 
     SqlMethods.Like(pri.Prioid, "2%") || SqlMethods.Like(pri.Prioid, "3%"))  

    select new {PM = wo.Wosource, Site = s.Id, Priority = pri.Prioid, Worktype = wot.Id, 
     WoNumber = wo.Id, Description = wo.Aenm, CreateDate = wo.Audt_created_dttm, 
     CloseDate = wo.Clsdt_date, 
     MonthNum = String.Format("{0:yyyy mm}", wo.Clsdt_date), 
     Planning = routines.Contains(pri.Prioid) ? "Planned" : "Unplanned"}); 

我試着使用:

MonthNum = String.Format("{0:yyyy mm}", wo.Clsdt_date) 

和正確給了我一年,但幾個月都是00我猜測這是因爲wo.Clsdt_date的格式與我的字符串格式不同(它是mm/dd/yyyy)。

任何想法?

回答

12

您需要MM而不是mmmm是分鐘。

+2

以10秒打我! :) –

+0

@羅林:那真是令人尷尬。咄。我不敢相信我沒有看到!感謝您的幫助。 –

+0

容易犯的錯誤,尤其是如果你是編程新手:p – Rawling

1

在日期格式中,mm表示分鐘數,而不是數月。改爲使用MM

+0

@ Adam V:感謝您的幫助。請原諒大腦放屁。我不知道爲什麼我看不到。 –

3

「mm」表示分鐘,「MM」表示月份,但包含月份的2位數字。因此,在2012年6月,你將有201206,但如果你只需要一個數字爲一個月,你可以用一個「M」,而不是「yyyyM」,你會得到20126

DateTime.Now.ToString("yyyyMM") 
+0

@ Vlad Bezden:謝謝你的幫助。 –