0

什么属性CultureInfo.InvariantCulture有助于丢弃"/".

我有这个问题,因为我有我的 customCulture。当我使用它来格式化DateTime它时,它会替换"/"为特定于文化的分隔符。

所以我想知道如果我改变我customCulture的功能"/"将被丢弃哪些属性。

让我解决我的问题,

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

我正在创建 customCulture 如下

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

我从用户那里获取日期格式并将其注入到我的 CustomCulture 对象中

customCulture.DateTimeFormat.ShortDatePattern = MyClass.DateFormatFromUser;

现在,当我想将其转换为字符串模式时。我这样做如下,

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

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

例如,如果他的用户给出的格式为

日/月/年

我目前的文化是法罗群岛,即{fo-FO}

对于这些,我得到的输出为 25-09-1990。

4

4 回答 4

3

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

customCulture.DateTimeFormat.DateSeparator = "/";
于 2013-07-11T07:16:49.107 回答
1

使用转义字符\:当您不希望将其替换为文化分隔符时,将其更改/为。\/

于 2013-07-11T07:13:26.817 回答
1

DateTimeFormatInfo.DateSeparator是特定于区域性的分隔符,用于分隔日期的组成部分。

于 2013-07-11T07:16:47.837 回答
1

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

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

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

无论您是直接将说明符包含在格式字符串中,String.Format("{0:dd/MM/yyyy}",DateTime.Now)还是像您尝试过的那样间接传递它CultureInfo.DateTimeFormat.ShortDatePattern,它都将始终被 DateSeparator 字符替换。

您唯一的选择是通过在字符前面加上 '\' 或按照 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);
于 2013-07-11T08:09:58.183 回答