C# 如何获取MediumDateString?

C# 如何获取MediumDateString?,c#,datetime-format,date-conversion,C#,Datetime Format,Date Conversion,我可以将YYYYMMDD格式的字符串值转换为更人性化的字符串,如下所示: string beginDate = GetElement(3, fileBaseName); string endDate = GetElement(4, fileBaseName); beginDate = DateTime.ParseExact(beginDate, "yyyyMMdd", CultureInfo.InvariantCulture).ToShortDateString(); endDa

我可以将YYYYMMDD格式的字符串值转换为更人性化的字符串,如下所示:

string beginDate = GetElement(3, fileBaseName);
string endDate = GetElement(4, fileBaseName);
beginDate = DateTime.ParseExact(beginDate,
    "yyyyMMdd",
    CultureInfo.InvariantCulture).ToShortDateString();
endDate = DateTime.ParseExact(endDate,
    "yyyyMMdd",
    CultureInfo.InvariantCulture).ToShortDateString();
return string.Format("{0} to {1}", beginDate, endDate);
但是如上所述使用ToSortDateString()时,我得到的格式并不像所需的那样友好“4/1/2016到4/30/2016

当我尝试ToLongDateString()时,它会向另一个方向走得太远,将数字扩展为月份名称(我想要),但也提供了一周中某一天的长格式,因此相同的值显示为“2016年4月1日星期五到2016年4月30日星期六”

我真正想要的是将日期范围显示为“2016年4月1日至2016年4月30日”(或“2016年4月1日至2016年4月30日”)


ToSortDateString()和ToLongDateString()之间是否有一个中间地带我可以使用,或者我是否需要“滚动我自己的”来获得它?

您可以使用自己的自定义格式(
MMMM d,yyyy
):

输出:

April 1, 2016 to April 30, 2016

您可以使用自己的自定义格式(
MMMM d,yyyy
):

输出:

April 1, 2016 to April 30, 2016

不,在.NET中,这两者之间没有任何区别——如果你看一下,你会看到和,但没有“中间日期模式”


如果您知道需要处理的所有区域性,您可以为每个区域性自定义显示-但是我会避免在您不知道有关区域性的情况下指定自定义格式字符串。(如果您了解某些文化,但不了解其他文化,您可以为您所了解的人硬编码格式字符串,而只为其他人使用长或短模式-这样不会给您带来很好的体验,但至少您不会在无意中做一些在文化上非常笨拙的事情。)

不,在.NET中,这两者之间没有任何区别——如果你看一下,你会看到和,但没有“中间日期模式”


如果您知道需要处理的所有区域性,您可以为每个区域性自定义显示-但是我会避免在您不知道有关区域性的情况下指定自定义格式字符串。(如果您了解某些文化,但不了解其他文化,您可以为您所了解的人硬编码格式字符串,而只为其他人使用长或短模式-因此它不会给您带来很好的体验,但至少您不会无意中做一些在文化上非常笨拙的事情。)

以获得我想要的内容(没有预设的“0”在本月1日之前)我确实需要“滚我自己的”:


为了得到我想要的(在本月1日之前没有预设的“0”),我确实需要“滚动我自己的”:


当心ParseExact和日期转换为本地日历,如果结果没有被转换为UTCIt的“01”而不是日期的“1”,还要确保您在之后指定类型,但现在对我来说已经足够接近了。@B.ClayShannon:updated,在这种情况下只使用一个
d
。当心ParseExact和日期转换为本地日历,另外,如果结果没有被翻译为UTCIt的“01”而不是日期的“1”,但现在对我来说已经足够接近了,请确保您在之后指定类型。@B.ClayShannon:updated,在这种情况下,只使用一个
d
private static string ToMediumDateString(string _date)
{
    string yearPortion = _date.Substring(0, 4);
    int monthNum = Convert.ToInt32(_date.Substring(4, 2));
    int dayNum = Convert.ToInt32(_date.Substring(6, 2));
    string monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(monthNum);
    return String.Format("{0} {1}, {2}", monthName, dayNum, yearPortion);
}