将从ToString("MMMM")返回的月份名称更改为自定义名称

7
使用以下代码,在de-CH文化环境下可以得到以下结果:
var dateFormat = new DateTime(2016, 10, 12).ToString("MMMM");
//Oktober

虽然我真正想要的是“Oktobär”,因为我正在翻译成一种方言。

我可以覆盖de-CH文化中返回的月份名称吗?它返回其他文化的名称应该保持不变。


瑞士德语没有官方的拼写规则。因此,您无法通过将其更改为de-CH文化来实现该目标。 - diiN__________
@diiN_ 是的,我知道。 - maracuja-juice
3
你可以更改特定实例的CultureInfo(参见DateTimeFormatInfo.MonthNames),但这不会改变再次获取de-CH文化时发生的情况。你是否总是使用该特定文化?如果是,你可以将其传递给所有的ToString/Format调用。 - Jon Skeet
2个回答

6
CultureInfo myCIclone = new CultureInfo("de-CH");

myCIclone.DateTimeFormat.MonthNames = new string[]
{"1","2","3","4","5","6","7","8","9","Oktobär","11","12", "13"};

var dateFormat = new DateTime(2016, 10, 12).ToString("MMMM", myCIclone);

如John Skeet所提到的,您可以覆盖MonthNames,以针对特定文化信息进行设置。


1
如果您在当前线程上设置了修改后的文化设置,则无需将其作为ToString方法的第二个参数指定。 - Andrei Olariu
谢谢,这符合预期!我在DateTimeFormat.MonthNames文档中读到了这个内容:如果您设置MonthNames属性,则还必须设置MonthGenitiveNames属性。 这些将用于什么?我不理解在MonthGenetiveNames属性中添加的备注:在某些语言中,日期中出现的月份名称以属格形式呈现。例如,俄罗斯(俄罗斯)或“ru-RU”文化中的日期由日号和属格月份名称组成,如1 Января。 - maracuja-juice
1
@Marimba,据我所知,这是针对语言的语法格的。大多数斯拉夫语言都有这个,这意味着根据上下文,月份名称会有所不同。因此,如果您的语言具有属格语法格,您也应该进行覆盖。 - mybirthname
@mybirthname 啊,现在我明白了! - maracuja-juice

0

这可能对你有所帮助。你需要覆盖默认值。

//Declare Culture Info with your goblaization name.
CultureInfo culture = new CultureInfo("de-CH");

//Assign needed value.
culture.DateTimeFormat.MonthNames = new string[]{"1","2","3","4","5","6","7","8","9","Oktobär","11","12", "13"};

//Assign it in string.
string date= new DateTime(2016, 10, 12).ToString("MMMM", culture);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接