我正在尝试获取客户的国家/地区,因此我使用CultureInfo.CurrentCulture.问题是,当我的加拿大客户使用我的网站时,他们会显示为美国人.
看起来CultureInfo.CurrentCulture正在返回我服务器的国家而不是他们的国家.那么我如何获得客户的国家?
我在以这种格式显示时间时遇到了一些麻烦:HH:mm:ss.无论我尝试什么,我都不会以那种格式得到它.
我希望荷兰文化中的时间是"nl-NL".
这是我的一个(虽然我忘了保持计数)第1000次尝试:
CultureInfo ci = new CultureInfo("nl-NL");
string s = DateTime.Now.TimeOfDay.ToString("HH:mm:ss", ci);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这段代码出了什么问题?
错误(例外)消息:
不是给定文化的有效日历.
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("fa-Ir"); //Error
ci.DateTimeFormat.Calendar = new System.Globalization.PersianCalendar();
Application.CurrentCulture = ci;
Run Code Online (Sandbox Code Playgroud)
它的解决方案是什么?
我可以Calendar在Windows XP区域选项中添加类型吗?
我只是碰到了一些非常奇怪的东西,只是想知道我是否遗漏了一些东西.
我试图将一个字符串(有千个分隔符)解析为一个double,并找到了下面的问题.
CultureInfo ci = CultureInfo.CurrentCulture; // en-ZA
string numberGroupSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator; //numberGroupSeparator = ,
string numberDecimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;//numberDecimalSeparator = .
string strValue = "242,445.24";
double try1;
double try2;
bool btry1 = Double.TryParse(strValue, out try1); //try1 = 242445.24 : btry1 = true
bool btry2 = Double.TryParse(strValue, NumberStyles.Any, null, out try2); //try2 = 0.0 : btry2 = false <- STRANGE
double try3 = Convert.ToDouble(strValue); //try3 = 242445.24
Run Code Online (Sandbox Code Playgroud)
现在我之所以不想使用的原因Convert.ToDouble是因为科学记谱法之前给了我一些问题.
有人知道为什么会这样吗?
编辑:
我已经更新了我当前的文化信息.
我使用的是infragistics webgrid,需要格式化货币字符串.为此我需要一个包含模式的字符串,例如"$ ### ###,00",我希望这可以从我目前的CultureInfo中找到.我怎样才能做到这一点?我是否需要从以下信息中手动撰写:
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyGroupSeparator
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyGroupSizes
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyDecimalDigits
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyDecimalSeparator
Run Code Online (Sandbox Code Playgroud)
等等
这是单线解决方案吗?
我在Windows Phone 7中创建了一个值转换器...
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// ...
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
......并像这样使用它......
<TextBlock Text="{Binding SomeField, Converter={StaticResource MyConverter}, ConverterParameter=SomeParameter}" <!-- ... --> />
Run Code Online (Sandbox Code Playgroud)
我的问题:argumentConvert方法的文化总是"en-US",即使我改变Windows Phone设备(或模拟器)的文化对德国德国说,这个culture论点仍然是英语.
看着
DateTime.TryParseExact(dateString, "M/d/yyyy hh:mm:ss tt",
CultureInfo.InvariantCulture, 0, out dateValue)
Run Code Online (Sandbox Code Playgroud)
我提供了确切的结构来寻找: M/d/yyyy hh:mm:ss tt
题
如果是这样,我为什么CultureInfo还需要指定呢?
我想写一个方法,从datetimeformat给我3个字母 - 代表日,月,年.
所以在en-US文化中我想要的返回值是(加上分隔符)
在de-DE中应该返回相同的方法
我查看了DateTimeFormatInfo类表单CurrentCulture,但只能找到分隔符你知道我怎么能得到其余的吗?
var culture = Thread.CurrentThread.CurrentCulture;
Console.WriteLine(culture.DateTimeFormat.DateSeparator);
Run Code Online (Sandbox Code Playgroud)
我需要这个,因为Excel中的TEXT函数不接受来自InvariantCulture的格式,只能从当前文化中处理它.
所以这样的东西在德语Excel版本中无效:
=TEXT(NOW();"dd.MM.yyyy")
Run Code Online (Sandbox Code Playgroud)
这需要设置
=TEXT(NOW();"TT.MM.JJJJ")
Run Code Online (Sandbox Code Playgroud)
(如果用VBA完成它并不重要,它不会被翻译)你可以看看下面的http://www.rondebruin.nl/win/s9/win013.htm
字符串格式可以是任何东西,因为用户可以按照他的喜好输入它,我需要将其翻译成当前的文化.
在使用文化信息时,将数字转换为double时,我遇到了奇怪的行为.使用荷兰文化进行
转换时"3,3",处理正确.如果我"3,3"使用美国文化转换,它会返回33.我期待一个错误.看我的例子:
static void Main(string[] args)
{
CultureInfo cultureDutch = new CultureInfo("nl-NL");
CultureInfo cultureUS = new CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = cultureDutch;
Console.WriteLine("Input 3,3 --> Expected 3,3");
Console.WriteLine("Output = " + Convert.ToDouble("3,3", cultureDutch));
// Actual result --> 3,3
Console.WriteLine("Input 3,3 --> Expected InvalidCastException");
Console.WriteLine("Output = " + Convert.ToDouble("3,3", cultureUS));
// Actual result --> 33
Console.WriteLine();
Console.WriteLine();
System.Threading.Thread.CurrentThread.CurrentCulture = cultureUS;
Console.WriteLine("Input 3.3 --> Expected InvalidCastException");
Console.WriteLine("Output = " + Convert.ToDouble("3.3", cultureDutch));
// Actual result --> 33
Console.WriteLine("Input …Run Code Online (Sandbox Code Playgroud) 我有一些麻烦将字符串"SΨZΣ"转换为小写字母.
在C#中,.ToLower()和.ToLowerInvariant()给出了"sψzσ"作为结果.虽然javascript返回"sψzς".
经过一些研究后,我认为已经明白字符'Σ'只有在它不在一个单词的末尾时才应翻译成'σ',在这种情况下它应该变成'ζ' - 所以javascript版本是精细.事实上,我在使用C#字符串调用外部API时遇到错误,而js字符串工作正常.
有关如何使C#正确降低字符串的任何想法?