Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将日期格式化为本地化的短MonthDay字符串_C#_.net_Datetime Format - Fatal编程技术网

C# 如何将日期格式化为本地化的短MonthDay字符串

C# 如何将日期格式化为本地化的短MonthDay字符串,c#,.net,datetime-format,C#,.net,Datetime Format,我想将DateTime格式化为一个字符串,其中包含缩写的月份名称和在图形中的轴标签中使用的日期 默认的日期时间格式字符串不包含缩写的月份。我想没有标准,但我可以使用月名前3个字符的子字符串,并将其替换为MonthDay格式。我之所以使用MonthDay,是因为月份和日期的顺序取决于语言环境 有人有更好的主意吗 编辑:使用date.ToString(“d MMM”)。它将显示9月7日您可以采用月日模式,将“MMMM”替换为“MMM”-然后应用该模式: string pattern = Cultur

我想将DateTime格式化为一个字符串,其中包含缩写的月份名称和在图形中的轴标签中使用的日期

默认的日期时间格式字符串不包含缩写的月份。我想没有标准,但我可以使用月名前3个字符的子字符串,并将其替换为MonthDay格式。我之所以使用MonthDay,是因为月份和日期的顺序取决于语言环境

有人有更好的主意吗


编辑:使用
date.ToString(“d MMM”)
。它将显示9月7日

您可以采用
月日
模式,将“MMMM”替换为“MMM”-然后应用该模式:

string pattern = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern;
pattern = pattern.Replace("MMMM", "MMM");
string formatted = dateTime.ToString(pattern);

这有点粗糙,但我相信它会起作用。

您可以使用自定义字符串格式化程序来实现这一点:

DateTime now = DateTime.Now;
Console.WriteLine("{0}", now.ToString("ddd MMMM dd"));

有关更多信息,请参阅链接页面上的“标准格式字符串如何工作”一节。

以下是我为类似情况提出的解决方案,即需要本地化版本的
01/29

Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "")
以下是所有区域性的格式输出,您可以查看它是否适合您:

CultureInfo.GetCultures(CultureTypes.AllCultures)
    .Select(c => new {
        c.Name,
        c.DateTimeFormat.MonthDayPattern,
        c.DateTimeFormat.ShortDatePattern,
        DayMonth1 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"[/\.\- ]?yy[/\.\- ]?", ""),
        DayMonth2 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yyyy[/\.\- ]|[/\.\- ]yyyy|yy[/\.\- ]|[/\.\- ]yy)", ""),
        DayMonth3 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "")
    })
    .OrderBy(x => x.Name)
    .Dump();

DateMonth1
replace将为两个区域性(特别是“bg”)删除一个额外的填充字符。

快速、轻松地完成这项工作

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Substring(0,3);

可以在Date.ToString()方法中传递CultureInfo。您可以使用特定的区域性信息,也可以使用CultureInfo.CurrentCulture:

var date = DateTime.Now;
var ci = new CultureInfo("de-CH");
var output = date.ToString("d MMM", ci);

他实际上想要缩短的版本,所以应该是date。ToString(“d MMM”)@Matt:这不会给出依赖于区域设置的顺序:“我之所以使用MonthDay,是因为月份和日期的顺序依赖于区域设置。”如果有(或将有)模式“MMMMM”:)太糟糕了,占位符没有明确的限制器。好的解决方案Jon Skeet顺便问一下,它是如何产生类似2014年9月10日(yyy-MMM-dd)@GayanRanasinghe:“它是如何产生的”是什么意思?我对我的英语很抱歉,事实上我试图得到类似yyy-MMM-dd-dd的东西,我使用了convert-ToString('yyyy-MMM-dd-dd-ddd'))但不确定什么是最有效的代码。@GayanRanasinghe:是的,所以我看不出问题。。。同样,如果你有一个不同的问题,你应该作为一个不同的问题提问。输出还应该包括年份和日期,这些项目的顺序应该由当前的文化决定。