使用DateTime.ToString()格式化日期时是否可以包含日期的后缀呢?
例如,我希望按照以下格式打印日期 - 2009年7月27日星期一。但是,使用DateTime.ToString()找到的最接近的例子是:Monday 27 July 2009。
我能否使用DateTime.ToString()实现这一点,还是必须要使用自己的代码来完成?
使用DateTime.ToString()格式化日期时是否可以包含日期的后缀呢?
例如,我希望按照以下格式打印日期 - 2009年7月27日星期一。但是,使用DateTime.ToString()找到的最接近的例子是:Monday 27 July 2009。
我能否使用DateTime.ToString()实现这一点,还是必须要使用自己的代码来完成?
公共静态字符串 SuffixDate(DateTime date) { 字符串序数;
switch (date.Day)
{
case 1:
case 21:
case 31:
ordinal = "st";
break;
case 2:
case 22:
ordinal = "nd";
break;
case 3:
case 23:
ordinal = "rd";
break;
default:
ordinal = "th";
break;
}
if (date.Day < 10)
return string.Format("{0:d}{2} {1:MMMM yyyy}", date.Day, date, ordinal);
else
return string.Format("{0:dd}{1} {0:MMMM yyyy}", date, ordinal);
}
获取日期后缀。(静态函数)
public static string GetSuffix(this string day)
{
string suffix = "th";
if (int.Parse(day) < 11 || int.Parse(day) > 20)
{
day = day.ToCharArray()[day.ToCharArray().Length - 1].ToString();
switch (day)
{
case "1":
suffix = "st";
break;
case "2":
suffix = "nd";
break;
case "3":
suffix = "rd";
break;
}
}
return suffix;
}
@Model.Pubdate.ToString("dddd, d'th' MMMM yyyy").Replace("1th","1st").Replace("2th", "2nd").Replace("3th", "3rd").Replace("11st", "11th").Replace("12nd", "12th").Replace("13rd", "13th")
ToString("dddd, d'th' MMMM yyyy")
会在日期后面添加“th”,例如“Tuesday, 31th May 2022”。然后使用一组字符串替换将1th、2th和3th更改为1st、2nd和3rd,并使用另一组字符串替换将11st、12nd和13rd更改回11th、12th和13th。
就算价值不大,这是我最终的解决方案,使用以下答案:
DateTime dt = DateTime.Now;
string d2d = dt.ToString("dd").Substring(1);
string suffix =
(dt.Day == 11 || dt.Day == 12 || dt.Day == 13) ? "th"
: (d2d == "1") ? "st"
: (d2d == "2") ? "nd"
: (d2d == "3") ? "rd"
: "th";
Date.Text = DateTime.Today.ToString("dddd d") + suffix + " " + DateTime.Today.ToString("MMMM") + DateTime.Today.ToString(" yyyy");
看看 Humanizr: https://github.com/Humanizr/Humanizer#date-time-to-ordinal-words
new DateTime(2015, 1, 1).ToOrdinalWords() => "1st January 2015"
new DateTime(2015, 2, 12).ToOrdinalWords() => "12th February 2015"
new DateTime(2015, 3, 22).ToOrdinalWords() => "22nd March 2015"
// for English US locale
new DateTime(2015, 1, 1).ToOrdinalWords() => "January 1st, 2015"
new DateTime(2015, 2, 12).ToOrdinalWords() => "February 12th, 2015"
new DateTime(2015, 3, 22).ToOrdinalWords() => "March 22nd, 2015"
string datestring;
// datestring = DateTime.Now.ToString("dd MMMM yyyy"); // 16 January 2021
// code to add 'st' ,'nd', 'rd' and 'th' with day of month
// DateTime todaysDate = DateTime.Now.Date; // enable this line for current date
DateTime todaysDate = DateTime.Parse("01-13-2021"); // custom date to verify code // 13th January 2021
int day = todaysDate.Day;
string dateSuffix;
if(day==1 || day==21 || day==31){
dateSuffix= "st";
}else if(day==2 || day==22 ){
dateSuffix= "nd";
}else if(day==3 || day==23 ){
dateSuffix= "rd";
}else{
dateSuffix= "th";
}
datestring= day+dateSuffix+" "+todaysDate.ToString("MMMM")+" "+todaysDate.ToString("yyyy");
Console.WriteLine(datestring);
public static string TwoLetterSuffix(this DateTime @this)
{
var dayMod10 = @this.Day % 10;
if (dayMod10 > 3 || dayMod10 == 0 || (@this.Day >= 10 && @this.Day <= 19))
{
return "th";
}
else if(dayMod10 == 1)
{
return "st";
}
else if (dayMod10 == 2)
{
return "nd";
}
else
{
return "rd";
}
}
litDate.Text = DatePart("dd", Now) & GetDateSuffix(DatePart("dd", Now))
Function GetDateSuffix(ByVal dateIn As Integer) As String
'// returns formatted date suffix
Dim dateSuffix As String = ""
Select Case dateIn
Case 1, 21, 31
dateSuffix = "st"
Case 2, 22
dateSuffix = "nd"
Case 3, 23
dateSuffix = "rd"
Case Else
dateSuffix = "th"
End Select
Return dateSuffix
End Function
使用最后一个字符串字符的另一种选项:
public static string getDayWithSuffix(int day) {
string d = day.ToString();
if (day < 11 || day > 13) {
if (d.EndsWith("1")) {
d += "st";
} else if (d.EndsWith("2")) {
d += "nd";
} else if (d.EndsWith("3")) {
d += "rd";
} else {
d += "th";
} else {
d += "th";
}
return d;
}
在MSDN文档中没有提到任何文化可以将17转换为17th。因此,您应该通过代码后台手动完成它。或者构建一个...您可以构建一个执行此操作的函数。
public string CustomToString(this DateTime date)
{
string dateAsString = string.empty;
<here wright your code to convert 17 to 17th>
return dateAsString;
}