Tag: cultureinfo

c#和日期文化问题

我写了一个asp.net应用程序,我的一个回发例程只是将用户提交的表单数据保存到sql 2005 db。 所有在我的开发机器上运行都很棒,但是当我部署到实时站点时,我的解析日期检查器的日期无效。 基本上它是期待在现场机器上的美国日期格式,但这不是我想要的。 用户需要能够以dd / MM / yyyy格式输入。 所以像21/10/2009这样的有效日期会在实时服务器上返回错误,但在我的开发机器上却不会。 下面是抛出exception的代码。 DateTime dt; dt = DateTime.Parse(sdate); //sdate in GB dd/MM/yyyy format 是否可以强制解析例程以dd / MM / yyyy格式预期日期?

entity framework – SQL Server 2005 – IIS服务器日期时间问题

我正在使用MVC3和Entity Framework。 在我的应用程序中,我需要通过EF调用SQL Server 2005中的存储过程,以根据传递的datetime参数搜索某些数据。 一切似乎都在当地环境中运作良好。 但是在将其托管到IIS之后,我在尝试从13-08-2012开始搜索时遇到exception(13我想在SQL中作为月份) 错误说 SqlDateTime溢出。 必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间 我理解错误是因为System.Datetime和SqlDatetime之间的日期时间格式之间的SqlDatetime 。 但我不明白为什么它在我的本地环境中使用相同的SQL Server没有任何问题,但在IIS服务器托管后收到此错误。 这个问题有解决方法吗?

ASP.NET MVC(异步)CurrentCulture不在Controller和View之间共享

我有一个针对.NET Framework 4.7.1的ASP.NET MVC 4应用程序,如果操作包含异步调用,则存在Controller和View之间不共享文化的问题。 我正在引用NuGet包Microsoft.AspNet.Mvc 5.2.3(可以在5.2.4中复制)。 这是Controller中的代码: public class CulturesTestController : Controller { public async Task Index(string value) { Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(“fi-FI”); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(“fi-FI”); var model = new CulturesContainer { CurrentCulture = Thread.CurrentThread.CurrentCulture, CurrentUICulture = Thread.CurrentThread.CurrentUICulture, CurrentThreadId = Thread.CurrentThread.ManagedThreadId }; Log.Write(Level.Info, “CurrentUICulture – Before Await – ” + “CurrentCulture: ” + $”{Thread.CurrentThread.CurrentCulture}, ” […]

CultureInfo线程安全

我有一个解决一些文本的multithreading应用程序,它需要使用英文文化信息来解析这个文本中的数字。 所以,我不想每次调用解析函数时都创建EngCulture。 目前我正在通过EngCulture作为参数,但我对此并不满意。 我想将EngCulture定义为静态成员,因此它将由线程共享。 Msdn文档说“这种类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证是线程安全的。” 我只是使用以下函数,所以我怎么知道TryParse是否使用EngCulture的任何实例成员? public static CultureInfo EngCulture = new CultureInfo(“en-US”, false); void parser() { if (int.TryParse(value, NumberStyles.Number, EngCulture, out num))… }

这是暂时改变当前线程文化的好方法吗?

我在一个相当大的ASP .NET Web Forms应用程序上工作,该应用程序目前主要在美国使用。 我们正在将其推广到世界其他地区,这当然意味着我们正在努力本地化应用程序的所有领域。 一般来说,我们的方法是在每个请求开始时设置当前线程的CurrentCulture和CurrentUICulture属性,以支持基于当前用户的语言环境的正确格式化和资源提取。 但是,在某些情况下,我们需要使用除当前用户文化之外的文化来运行某些代码。 例如,“用户A”居住在德国,但适用于与法国其他公司有业务往来的公司。 当“用户A”想要为其中一家法国公司创建发票(PDF)时,我们希望发票生成代码以“fr-FR”文化而非“de-DE”文化运行。 我已经考虑过几种方法可以很容易地做到这一点,我想知道我是否正确地做到了这一点。 我主要关心的是性能和线程安全性。 一种方法涉及一种静态方法,旨在使用提供的文化来运行给定任务。 像这样的东西: public static void RunWithCulture(CultureInfo culture, Action task) { if (culture == null) throw new ArgumentNullException(“culture”); var originalCulture = new { Culture = Thread.CurrentThread.CurrentCulture, UICulture = Thread.CurrentThread.CurrentUICulture }; try { Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; task(); } finally { Thread.CurrentThread.CurrentCulture = originalCulture.Culture; […]

在Windows Server 2012上安装更多文化

在Windows 8.1计算机上,我看到的文化比Windows Server 2012计算机上的文化要多得多:791对比378.举一个具体的例子,服务器机器缺少’en-HK’文化。 这是我用来枚举它们的测试代码: foreach (var ci in CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures).OrderBy(ci => ci.Name)) { Console.WriteLine(“{0} ({1})”, ci.Name, ci.EnglishName); } 问题:如何在Windows Server 2012上安装更完整的区域性列表,以使其与Windows 8.1上的可用文档列表相匹配?

如何使DateTime独立于当前的文化?

我想尝试将日期时间转换为字符串并返回,但要使其适用于所有文化。 我基本上有一个Textbox(tbDateTime)和一个标签(lbDateTime)。 标签告诉用户,软件期望输入tbDateTime的格式。 Textbox的输入将用于MySQL命令。 目前它的工作原理如下: lbDateTime.Text = “DD.MM.YYYY hh:mm:ss”; // I live in germany DateTime date = Convert.ToDateTime(tbDateTime.Text); String filter = date.ToString(“yyyy-MM-dd HH:mm:ss”); 现在我的问题: 是否可以根据当前文化确定lbDateTime.Text的格式字符串? Convert.ToDateTime函数使用哪种格式? 我希望你能帮助我。 我实际上没有电脑来测试不同的文化,所以我非常害怕我做错了什么。

为什么没有文化枚举?

问候, 我想知道为什么C#中的文化没有预先设定的枚举? 由于文化永远不会改变,并且总是像“nl-NL,en-GB,en-US”..为什么不为它做一个简单的事情让事情变得有点容易? [编辑] 如上所述,文化会发生变化……但不是全部。 为什么不制作一个包含所有文化并允许添加/更改它们的枚举/类类型?

.Net CultureInfo Month Names返回一个额外的空字符串

我有以下代码来获取月份名称列表: var monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames; 出于某种原因,这会继续返回一个额外的空字符串值以及Month名称: 我正在使用Xamarin Studio。 之前有人遇到过这个吗?

Culture-Invariant区分大小写的字符串比较会在不同的计算机上返回不同的结果

我发现我的机器和构建服务器上的测试结果不同。 我设法找到了不同的单行。 这是一个字符串比较。 在第一个字符的情况下,两个字符串不同。 下面的测试在我的本地机器上传递,在构建机器上失败。 [TestClass] public class Tests { [TestMethod] public void Strings() { Assert.IsFalse(0 == string.Compare(“Term’s”, “term’s”, false, CultureInfo.InvariantCulture)); } } 我也尝试将其更改为string.Equals : string.Equals(“Term’s”, “term’s”, StringComparison.InvariantCulture); string.Equals在构建服务器上返回true,并在本地计算机上返回false。 顺序比较在两台机器上给出相同的结果: string.Compare(“Term’s”, “term’s”, StringComparison.Ordinal)) 据我了解,InvariantCulture应该在各地返回相同的结果。 区分大小写的文化不变字符串比较如何依赖于机器? 我应该检查哪些设置来识别问题? 更新:平台和字符串 字符串很重要。 对于具有“异国情调”标点符号的字符串,例如右单引号或右双引号,可以观察到这些结果 似乎该行为在Windows 8计算机上重现。 如果您键入以下内容,甚至可以在https://dotnetfiddle.net/上看到它: using System; using System.Globalization; public class Program { public static void Main() { […]