首页 > 编程语言 >C# CultureInfo中常用的InvariantCulture

C# CultureInfo中常用的InvariantCulture

时间:2024-05-14 23:30:28浏览次数:16  
标签:数据中心 Console CultureInfo C# DateTime InvariantCulture WriteLine

1、CultureInfo的InvariantCulture的作用

(1)、CultureInfo使整个.NET Framework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“机器”看,这样的多文化处理反而不妥,造成同一个数据的不同展现形式,尤其是读写两方的文化地区不同时,数据可能根本无法被正常读取或者产生潜在bug,因此这里,正是InvariantCulture的用武之地。

(2)、当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是不同的CultureInfo下,这些操作的结果可能会不一样。这里要介绍一下非常容易被忽视InvariantCulture。

 

2、使用场景

你编写一个程序,要向数据中心服务器传递一些时间数据,你会怎么写?直接DateTime.ToString()?那你就大错特错了,下面用代码,举个非常形象的例子。在一个控制台里,模拟数据中心,然后放出多个线程,模拟客户端程序传递数据。

复制代码
        static readonly string[] CultureSources = { "en-us", "zh-cn", "ar-iq", "de-de" };
        static readonly Random Ran = new Random(Environment.TickCount);
        static void Main()
        {
            Console.WriteLine("数据中心开始接受客户端数据:");
            for (int i = 0; i < CultureSources.Length; i++)
                ThreadPool.QueueUserWorkItem(Client, i);
            Console.ReadKey(true);

            Console.WriteLine("");
            Console.WriteLine("数据中心:…………");
        }

        static void Client(object obj)
        {
            int id = (int)obj;
            Thread.Sleep(Ran.Next(1000));

            CultureInfo cul = CultureInfo.GetCultureInfo(CultureSources[id]);
            Thread.CurrentThread.CurrentCulture = cul;
            Console.WriteLine("某客户端操作系统语言设置{0}\n传送数据:{1}\n", cul.DisplayName, new DateTime(1990, 10, 27).ToShortDateString());
        }
复制代码

同样的DateTime.ToShortDateString(),在英语-美国,中文-中国,阿拉伯语-伊拉克和德语-德国的不同环境下,1990年10月27日竟然有如此不同的输出结果,这些数据让数据中心服务器情何以堪啊!!!

造成这个情况的原因是:在进行日期时间输出时,.NET会考虑当前线程的CultureInfo,即Thread.CurrentThread.CurrentCulture(或者CultureInfo.CurrentCulture),并根据CultureInfo,进行相应地区文化的数据处理。注意不要和UICulture混淆。

解决方案就是使用这个特殊的InvariantCulture.解决代码如下:

Console.WriteLine("某客户端操作系统语言设置{0}\n传送数据:{1}\n", cul.DisplayName, new DateTime(1990, 10, 27).ToString(CultureInfo.InvariantCulture.DateTimeFormat.ShortDatePattern, CultureInfo.InvariantCulture));

ok,这样不管客户端运行在什么语言环境下,输出的时间格式都是统一的,方面数据中心服务器对数据做后续处理。这样所有的输出结果都保持一致了。

另外再举个例子:

  1. float a = 10.156f;
  2.  string str = a.ToString("f1", CultureInfo.InvariantCulture);

标签:数据中心,Console,CultureInfo,C#,DateTime,InvariantCulture,WriteLine
From: https://www.cnblogs.com/Charltsing/p/18192501/CultureInfoInvariantCulture

相关文章

  • CSS实现浮动效果
    一、浮动早期用于实现文字环绕图片(环绕布局),现在用于让元素并列布局(块元素并排)。浮动元素会脱离文档流,后边的元素会把空出来的位置补上去。但是又因为浮动元素的层级高,所以会将未浮动的元素进行覆盖,但是文字不会。float:none无浮动,left左浮动,right右浮动。1、css布局的三种机......
  • How to Solve VAS 6154 Interface License Expired: Unleash Your Automotive Diagnos
    WelcometoourcomprehensiveguideonresolvingtheVAS6154InterfaceLicenseExpiredissue.Ifyou'reanautomotiveenthusiastorprofessional,chancesareyou'veencounteredthisfrustratingproblemduringyourdiagnosticendeavors.Butfret......
  • ubuntu系统 设置docker以及容器开机 启动
     一、Docker服务设置开机启动docker设置开机启动systemctlenabledocker.servicedocker关闭开机启动systemctldisabledocker.service重新设置docker在系统中的自启动systemctlreenabledocker.service 二、Docker服务设置开机启动启动时加......
  • Structures Or Why Don't Things Fall Down (Reading)
    1BentmasonrycolumninSalisburyCathendral2Stressconcentrationatcracktip3'Aneurism'incylindricalballoon4Sectionofarterywalltissue5CorbelledvaultatTiryns6Simi-corbelledposterngateatTiryns7Clarebridge,Cambride(c......
  • AoPS - Chapter 7 Functions
    这一章主要讲解函数的运算与函数方程求解。函数的运算对于函数\(f\),若函数\(g\)满足对任意\(x\)有\(g(f(x))=x\),则\(g\)为\(f\)的反函数(Inverse)。若函数\(h\)满足对于任意\(x\)有\(h(x)=g(f(x))\),则\(h\)为\(f\)与\(g\)的复合(composition),记为\(h=g......
  • XShell执行systemctl stop network命令后断开连接,并重连失败
    在XShell中执行命令systemctlstopnetwork后,断开了与虚拟机的连接,进行重新连接,显示连接失败,停止虚拟机网络服务后,XShell无法继续连接。需要重启虚拟机的网络服务【1】重启解决systemctlstopnetwork是暂时关闭服务,不是永久的,所以重启后会自启。在主机有网络的情况下,重启......
  • C语言第六篇-结构体
    一、结构体的概念1.结构体是什么?在实际的应用中,往往变量的类型复杂多变,我们仅仅使用C语言内置的类型无法准确的去定义变量,所以引出了结构体这个概念。也就是说,为了描述复杂类型的个体,只用C语言基础的内置类型不能完整的表述,而结构体就可以很好的解决这个问题。结构体本质上还是......
  • 将netcore打包好的程序,以守护进程方式部署到CentOS系统中
     进入守护进程目录:  cdetc/systemd/system创建守护进行服务:vimy-auth.service将如下代码更改为对应的服务,保存后退回[Unit]Description=Auth.NETWebAPIApprunningonCentOS[Service]WorkingDirectory=/home/authExecStart=/usr/bin/dotnet/h......
  • Unraid 使用 Docker Compose 安装 Immich 套件无法启用人脸识别的原因及修复方法
    原因问题原因是官方教程中的docker-compose.yml指明的机器学习组件immich-machine-learning中的container_name也就是docker-compose.yml中不同service可以互访的媒介hostname与immich-server默认设置中的机器学习服务器url的hostname不匹配造成的。解决方法......
  • AtCoder Regular Contest 177
    AtCoderRegularContest177A-Exchange问题陈述判断\(n\)个价格分别为\(x_i\)的商品,问能否通过有限数量的\(1\)元,\(5\)元,\(10\)元,\(50\)元,\(100\)元,\(500\)元,购买。思路贪心。每个商品从\(500\)元开始,能用就尽量用。如果中间某个商品无法被满足,则无解,反......