标签: cultureinfo

.NET中CultureInfo的CurrentCulture和CurrentUICulture属性有什么区别?

在.NET CultureInfo中,System.Globalization命名空间中有类.它有两个类似的属性,都返回CultureInfo类型的值:CurrentCultureCurrentUICulture.

他们之间有什么区别?

我何时以及为何使用哪一个?

.net globalization cultureinfo

345
推荐指数
5
解决办法
7万
查看次数

如何在C#中使用本地化

我似乎无法让本地化工作.

我有一个类库.现在我想在那里创建resx文件,并根据线程文化返回一些值.

我怎样才能做到这一点?

c# localization cultureinfo

256
推荐指数
5
解决办法
19万
查看次数

有没有办法为整个应用程序设置文化?所有当前线程和新线程?

有没有办法为整个应用程序设置文化?所有当前线程和新线程?

我们将文化的名称存储在数据库中,当我们的应用程序启动时,我们就会这样做

CultureInfo ci = new CultureInfo(theCultureString);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
Run Code Online (Sandbox Code Playgroud)

但是,当然,当我们想要在新线程中做某事时,这会"丢失".有没有办法设置CurrentCultureCurrentUICulture整个应用程序?那么新线程也会获得这种文化?或者,只要创建了一个我可以连接的新线程,就会触发某个事件?

c# multithreading cultureinfo

173
推荐指数
5
解决办法
16万
查看次数

查找十进制值的小数位数,无论文化如何

我想知道是否有一种简洁而准确的方法来提取十进制值中的小数位数(作为int),可以安全地在不同的文化信息中使用?

例如:
19.0应该返回
1,27.5999应该返回4,19.12
应该返回2,
等等.

我写了一个查询,在一个句点上执行字符串拆分以查找小数位:

int priceDecimalPlaces = price.ToString().Split('.').Count() > 1 
                  ? price.ToString().Split('.').ToList().ElementAt(1).Length 
                  : 0;
Run Code Online (Sandbox Code Playgroud)

但我发现这只适用于使用'.'的地区.作为小数分隔符,因此在不同系统中非常脆弱.

c# cultureinfo decimal

72
推荐指数
9
解决办法
8万
查看次数

具有CultureInfo的DateTime.Now.DayOfWeek.ToString()

我有代码:

DateTime.Now.DayOfWeek.ToString()
Run Code Online (Sandbox Code Playgroud)

这给了我一周的英文日名称,我希望有德文版,如何在这里添加CultureInfo以获得德文日的名字?

c# asp.net datetime cultureinfo

66
推荐指数
4
解决办法
8万
查看次数

Int32.ToString()是否特定于文化?

我正在运行ReSharper的测试版,它给了我以下代码的警告:

int id;
// ...
DoSomethingWith(id.ToString());
Run Code Online (Sandbox Code Playgroud)

警告在id.ToString()通话中,它告诉我"明确指定字符串转换中的文化".我理解这个警告,而且我知道如何修复它 - 只需将代码更改为更加笨拙id.ToString(CultureInfo.InvariantCulture).

但我的问题是:这是必要的吗?我的意思是,显然,当您使用类型DateTime(不同的文化具有不同的日期格式)和Double(用于小数点的不同字符)时,指定文化很重要.但是Int32.ToString(),至少在en-US和invariant文化中,根本不添加任何格式.没有逗号,没有小数点,没有美元符号,没有.那么文化会有什么不同?

当您调用无参数时,是否有一些文化实际上会添加某种格式Int32.ToString()?或者这是ReSharper测试版中的错误,这个警告真的不适用Int32(在这种情况下我会提交ReSharper错误报告)?

.net c# resharper cultureinfo

64
推荐指数
3
解决办法
2万
查看次数

DateTime.TryParseExact()拒绝有效格式

我正在解析ASP.NET WebForms页面中的DateTime值,并且日期字符串一直被DateTime.TryParseExact()方法拒绝,即使它明确匹配提供的格式字符串之一.

它似乎在我家的开发机器上失败但在生产服务器上工作,所以我在考虑涉及本地日期设置,但即使我提供一个IFormatProvider (CultureInfo)对象作为参数,也会发生此错误

这是代码:

DateTime startDate;
string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
                    "dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};

var errStart = row.FindControl("errStartDate"); //my date format error message
if (!DateTime.TryParseExact(txtStartDate.Text, formats, null, DateTimeStyles.None, out startDate))
{
    errStart.Visible = true; //we get here even with a string like "20/08/2012"
    return false;
}
else
{
    errStart.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

注意我null FormatProvider在上面给出了一个,但是当我为这个参数提供一个CultureInfo对象 时会出现同样的问题(CultureInfo provider = new CultureInfo("en-US")).

我错过了什么?

.net c# cultureinfo

60
推荐指数
3
解决办法
9万
查看次数

为什么DateTime.ParseExact()不能使用"M/d/yyyy"解析"9/1/2009"

我有一个看起来像这样的字符串:"9/1/2009".我想将其转换为DateTime对象(使用C#).

这有效:

DateTime.Parse("9/1/2009", new CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这不起作用:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);
Run Code Online (Sandbox Code Playgroud)

日期中没有单词(如"九月"),我知道具体的格式,所以我宁愿使用ParseExact(我不明白为什么需要CultureInfo).但我继续得到可怕的"字符串未被识别为有效的DateTime"异常.

谢谢

一点点跟进.以下是3种有效的方法:

DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)

这里有3个不起作用:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"));
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);
Run Code Online (Sandbox Code Playgroud)

所以,Parse()适用于"en-US",但不适用于ParseExact ...意外?

.net datetime parsing cultureinfo

56
推荐指数
1
解决办法
11万
查看次数

当字符串保证不会改变时,字符串比较真的可以根据文化而有所不同吗?

我正在从配置文件中读取加密的凭证/连接字符串.Resharper告诉我,"String.IndexOf(string)在这里是特定于文化的"这一行:

if (line.Contains("host=")) {
    _host = line.Substring(line.IndexOf(
        "host=") + "host=".Length, line.Length - "host=".Length);
Run Code Online (Sandbox Code Playgroud)

......所以想把它改成:

if (line.Contains("host=")) {
    _host = line.Substring(line.IndexOf("host=", System.StringComparison.Ordinal) + "host=".Length, line.Length -   "host=".Length);
Run Code Online (Sandbox Code Playgroud)

无论应用程序在何处部署,我正在阅读的值始终为"host =".添加这个"System.StringComparison.Ordinal"位是否真的明智?

更重要的是,它可以伤害任何东西(使用它)吗?

c# resharper cultureinfo configuration-files string-comparison

54
推荐指数
3
解决办法
2万
查看次数

从当前文化中获取货币?

有没有办法从应用程序文化设置动态获取当前信息?基本上,如果用户已将文化设置为美国,我想知道货币是美元,或者如果他们将其设置为英国我想要英镑等...等等.

这样我就可以在付款时将此信息发送给PayPal

c# currency cultureinfo

51
推荐指数
4
解决办法
5万
查看次数