我正在尝试让我的应用程序处理来自字符串的DateTimes的一些转换。为了处理不同的文化,我指定了我想要转换使用的文化。我认为这让我受到了覆盖,但我发现你可以改变该系统如何定义“en-US”的具体元素,如长短日期模式。 在这些情况下,当解析的日期是MM / dd / yyyy格式时,下面的代码不起作用。
CultureInfo c = new CultureInfo("en-US");
string[] permissions = Regex.Split(permissionData, @"\r\n");
foreach (string permission in permissions)
{
string[] details = permission.Split(',');
this.Add(new WPermission()
{
WRegion = Convert.ToInt32(details[0],c),
StartDate = Convert.ToDateTime(details[1],c),
EndDate = Convert.ToDateTime(details[2],c)
});
}
我的问题是:有没有办法访问“en-US”的默认定义,并加载而不是用户定义的版本,或者我降级为ParseExact
之类的内容?作为一个注释,我无法控制我正在解析的字符串的源格式,它是第三方。
谢谢!
答案 0 :(得分:1)
您可以使用与英语相关联的CultureInfo.InvariantCulture,但忽略区域信息和用户自定义。
this.Add(new WPermission() {
WRegion = Convert.ToInt32(details[0], CultureInfo.InvariantCulture),
StartDate = Convert.ToDateTime(details[1], CultureInfo.InvariantCulture),
EndDate = Convert.ToDateTime(details[2], CultureInfo.InvariantCulture)
});
答案 1 :(得分:1)
此特定示例可由using the Invariant Culture处理,它使用美式日期格式。
但是,如果您知道日期的确切表示,您可能仍希望使用DateTime.ParseExact
,因为它还具有显示以精确格式<解析日期的意图的附加副作用/ em>非常清楚。
答案 2 :(得分:0)
InvariantCulture非常适合英语,但对于适用于其他语言的更通用的解决方案,请尝试:
CultureInfo c = new CultureInfo("en-US", false);
向构造函数添加false会告诉它忽略文化的任何用户自定义。