2016-03-02 80 views
1

如何將日期時間字段轉換爲C#格式的1st Feb 2011格式的字符串? doj是在sql server中的datetime字段。如何將日期時間字段轉換爲像2011年2月1日那樣的字符串?

string DateOfJoin = dt.Rows[0]["DOJ"].ToString();//2011-02-01 00:00:00.000 
+0

您的字符串是「2015年1月1日」還是「2/1/2011 12:00:00 AM」?該數據表中第一列的類型是什麼? –

+0

我需要這種格式。日月年。我的字符串是2/1/2011 12:00:00 AM –

+0

而2011年2月1日可以是'2月1日'或'2月1日**'而不是**'1月1日'。 –

回答

5
後綴後綴

首先,2/1/2011可以是2月1日或1月2日 1月1日

其次,讓我們來分析你stringDateTime

DateTime dt = DateTime.ParseExact(dt.Rows[0]["DOJ"].ToString(), 
            "M/d/yyyy hh:mm:ss tt", 
            CultureInfo.InvariantCulture); 

,或者你可以明確地將其轉換爲DateTime

DateTime dt = (DateTime)dt.Rows[0]["DOJ"]; 

三,.NET並沒有在BCL內置的方式來產生天后綴。但Lazlowwrite a method因爲這對我來說似乎是okey;

static string GetDaySuffix(int day) 
{ 
    switch (day) 
    { 
     case 1: 
     case 21: 
     case 31: 
      return "st"; 
     case 2: 
     case 22: 
      return "nd"; 
     case 3: 
     case 23: 
      return "rd"; 
     default: 
      return "th"; 
    } 
} 

你可以像這樣的方法;

string DateOfJoin = String.Format("{0}{1} {2}", 
            dt.Day, 
            GetDaySuffix(dt.Day), 
            dt.ToString("MMM yyyy", CultureInfo.InvariantCulture)); 

產生

enter image description here

+0

感謝您的努力。 –

+0

@krishnamohan很高興幫助。 –

1
//  try this 

string DateOfJoin =Convert.ToDateTime(dt.Rows[0]["DOJ"]).ToString("dd MMMM yyyy HH:mm:ss"); 
string DateOfJoin =Convert.ToDateTime(dt.Rows[0]["DOJ"]).ToString("dd MMMM yyyy"); 
+1

這不是重點。 –

+0

@SonerGönül爲什麼? –

+0

再次重新閱讀該問題。 –

0

根據指定的文化,悠久的日期字符串可以通過鑄造對象爲DateTime,然後調用ToString()與格式參數來實現。

string DateOfJoin = ((DateTime)dt.Rows[0]["DOJ"]).ToString("D"); 

進一步參考here

編輯:格式化的東西,如「1」,「2號」,要求你寫一個評估日數的自定義方法,並附加正確的字符串給它,像:

private string GetSuffix(DateTime dt) 
{ 
    if(dt.Days % 10 == 1) 
    { 
     return dt.Days.ToString() + "st"; 
    } 
    else if(dt.Days % 10 == 2) 
    { 
     return dt.Days.ToString() + "nd"; 
    } 
    else if(dt.Days % 10 == 3) 
    { 
     return dt.Days.ToString() + "rd"; 
    } 
    else 
    { 
     return dt.Days.ToString() + "th"; 
    } 
} 

然後添加字符串的這一部分,以日期時間的一個ToString( 「Y」),如:

string DateOfJoin = GetSuffix((DateTime)dt.Rows[0]["DOJ"]) + " " + ((DateTime)dt.Rows[0]["DOJ"]).ToString("Y"); 
+0

看起來第一列不是基於OP評論的DateTime。 –

+0

得到像這樣的輸出 - 2011年2月1日星期二。但我需要2011年2月1日 –

0
Var dt = DateTime.Parse(DateOfJoin); 
dt.ToString('F'); 

請參閱下頁的底部更多格式

Msdn DateTime

+0

'F'作爲'char'?我很確定沒有這樣的過載。 –

2

使用下面的格式,以獲得類似的不帶後綴see explanation

string DateOfJoin = dt.Rows[0]["DOJ"].ToString("dd MMMM yyyy"); 

但是得到你需要的後綴打破它,讓你得到一天單獨即

string DateOfJoin = dt.Rows[0]["DOJ"].ToString("dd MMMM yyyy"); 

我會在下面用,如果你真的需要

string day = dt.Rows[0]["DOJ"].ToString("dd"); 
day = GetDaySuffix(Int32.Parse(day)); 

這是用一個函數來補充一點,我最初發現here

string GetDaySuffix(int day) 
{ 
    switch (day) 
    { 
     case 1: 
     case 21: 
     case 31: 
      return "st"; 
     case 2: 
     case 22: 
      return "nd"; 
     case 3: 
     case 23: 
      return "rd"; 
     default: 
      return "th"; 
    } 
} 



string DateOfJoin = String.Format("{0} {1}", day, dt.Rows[0]["DOJ"].ToString("MMMM yyyy")); 

未經測試,但應該是有益的開端

0

此釘可使用以下方法來完成:

DateTime date = new DateTime(2015, 01, 01); 
// 1st Jan 2015 
string s = Ordinal.Add(date.Day) + date.ToString(" MMM yyyy", System.Globalization.CultureInfo.InvariantCulture); 

這裏Ordinal類實現如下:

static class Ordinal { 
    public static string Add(int num) { 
     if(num <= 0) return num.ToString(); 
     switch(num % 100) { 
      case 11: 
      case 12: 
      case 13: 
       return num + "th"; 
     } 
     switch(num % 10) { 
      case 1: return num + "st"; 
      case 2: return num + "nd"; 
      case 3: return num + "rd"; 
      default: return num + "th"; 
     } 
    } 
} 
相關問題