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。
答案 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);