如何将日期时间字段转换为像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
首先,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内置的方式来产生天后缀。但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));
产生
感谢您的努力。 –
@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");
这不是重点。 –
@SonerGönül为什么? –
再次重新阅读该问题。 –
根据指定的文化,悠久的日期字符串可以通过铸造对象为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");
看起来第一列不是基于OP评论的DateTime。 –
得到像这样的输出 - 2011年2月1日星期二。但我需要2011年2月1日 –
'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";
}
}
}
您的字符串是“2015年1月1日”还是“2/1/2011 12:00:00 AM”?该数据表中第一列的类型是什么? –
我需要这种格式。日月年。我的字符串是2/1/2011 12:00:00 AM –
而2011年2月1日可以是'2月1日'或'2月1日**'而不是**'1月1日'。 –