如何将日期时间字段转换为像2011年2月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日'。 –

后缀后缀

首先,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很高兴帮助。 –

//  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

再次重新阅读该问题。 –

根据指定的文化,悠久的日期字符串可以通过铸造对象为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日 –

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

请参阅下页的底部更多格式

Msdn DateTime

+0

'F'作为'char'?我很确定没有这样的过载。 –

使用下面的格式,以获得类似的不带后缀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")); 

未经测试,但应该是有益的开端

此钉可使用以下方法来完成:

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"; 
     } 
    } 
}