如何将日期时间字段转换为C#中格式为1st Feb 2011
的字符串? doj
是sql server中的datetime
字段。
string DateOfJoin = dt.Rows[0]["DOJ"].ToString();//2011-02-01 00:00:00.000
答案 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));
生成
答案 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)
答案 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";
}
}
}