在CultureInfo中放弃“/”的功能

时间:2013-07-11 07:11:09

标签: c# cultureinfo

CultureInfo.InvariantCulture中的哪些属性有助于放弃"/"的功能。

我遇到了这个问题因为我有自己的customCulture。 当我用它来格式化DateTime时,它用文化特定的分隔符替换"/"

所以我想知道,如果我在customCulture中更改"/"的功能,将会丢弃哪些属性。

让我清楚我的问题,

我想将一些数据导出到用户指定的DateTime文件。

我正在创建customCulture,如下所示

CultureInfo customCulture =  new CultureInfo(CultureInfo.CurrentCulture.Name);

我从用户那里获取日期格式并将其作为

注入我的CustomCulture对象
customCulture.DateTimeFormat.ShortDatePattern = MyClass.DateFormatFromUser;

现在我想将其转换为String模式。我这样做,

string.Format(customCulture, "{0:G}", dateTimeValue);

现在问题是String.Format将ShortDatePattern中存在的任何“/”替换为customCulture.DateTimeFormat.DateSeparator

例如如果用户将格式设为

  

DD / MM / YYYY

我目前的文化是 faeroese 即。{fo-FO}

对于这些我输出为25-09-1990。

4 个答案:

答案 0 :(得分:3)

如果您想更改自定义文化,以便日期分隔符是斜杠(/),那么您正在寻找DateTimeFormatInfo.DateSeparator property

customCulture.DateTimeFormat.DateSeparator = "/";

答案 1 :(得分:1)

Use the escape character \:当您不希望将其替换为文化分隔符时,将每/更改为\/

答案 2 :(得分:1)

DateTimeFormatInfo.DateSeparator是特定于文化的分隔符,用于分隔日期的组成部分。

答案 3 :(得分:1)

你问的是不可能的,Marcin Juraszek是对的。对格式说明符和CultureInfo如何协同工作存在误解。

/字符是格式说明符,就像m,D,y,Y和所有其他日期格式说明符一样。这只是格式字符串的语法,它与文化无关,也无法改变。您不能更改“/”的含义,只能更改其他说明符的含义

String.Format使用此说明符来查找格式化日期时应放置CultureInfo的DateSeparator字符的位置。

是否将说明符直接包含在String.Format("{0:dd/MM/yyyy}",DateTime.Now)之类的格式字符串中,或​​者通过CultureInfo.DateTimeFormat.ShortDatePattern间接传递它并不像您尝试的那样,它始终会被DateSeparator字符替换。< / p>

你唯一的选择是escape the character,可以在前面添加“\”,或用''作为cremor建议,例如

customCulture.DateTimeFormat.ShortDatePattern = "dd\\/MM/yyyy";

customCulture.DateTimeFormat.ShortDatePattern = "dd'/'MM/yyyy";

所以,如果你想创建一个像11-07/2013这样的字符串,你必须写这样的东西:

CultureInfo customCulture = new CultureInfo(CultureInfo.CurrentCulture.Name);
customCulture.DateTimeFormat.ShortDatePattern = "dd/MM\\/yyyy";
customCulture.DateTimeFormat.DateSeparator = "-";
var dateTimeValue = DateTime.Now;
var result = string.Format(customCulture,"{0:d}", dateTimeValue);
Console.WriteLine(result);