如何将datetime字段转换为字符串,如2011年2月1日?

时间:2016-03-02 12:29:56

标签: c# asp.net datetime

如何将日期时间字段转换为C#中格式为1st Feb 2011的字符串? doj是sql server中的datetime字段。

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

6 个答案:

答案 0 :(得分:5)

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

其次,让我们将您的string解析为DateTime

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中没有内置方式来生成日后缀。但Lazlow write a method对于那些有用的东西似乎对我来说是非常的;

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

答案 1 :(得分: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"));

未经测试但应该是有用的开始

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

根据指定的区域性,可以通过将对象强制转换为DateTime,然后使用format参数调用ToString()来实现长日期字符串。

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

进一步参考here

修改:使用' 1st',' 2nd'等格式进行格式化,要求您编写一个自定义方法,用于评估日期编号并将正确的字符串附加到其中,例如:

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

然后将此部分字符串添加到DateTime的ToString(" Y"),如:

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

答案 4 :(得分:0)

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

有关更多格式,请参阅以下页面的底部

Msdn DateTime

答案 5 :(得分: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";
        }
    }
}