C# CultureInfo中常用的InvariantCulture

C# CultureInfo中常用的InvariantCulture本文参考自CultureInfo中重要的InvariantCulture,纯属读书笔记,加深记忆1、CultureInfo的InvariantCulture的作用(1)、CultureInfo使整个.NETFramework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“…

大家好,又见面了,我是你们的朋友全栈君。

本文参考自CultureInfo中重要的InvariantCulture,纯属读书笔记,加深记忆

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());
        }

C# CultureInfo中常用的InvariantCulture

同样的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));

C# CultureInfo中常用的InvariantCulture

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

 

转载于:https://www.cnblogs.com/GreenLeaves/p/6757917.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151001.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 高通搜网流程_搜艺贝流程

    高通搜网流程_搜艺贝流程这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入https:…

  • ubuntu clion 2022版激活码【2022.01最新】2022.02.21

    (ubuntu clion 2022版激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • java依赖jar包的方式_java打包命令

    java依赖jar包的方式_java打包命令大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的mainclass作为你这个jar包的程序入口。具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。比如有个叫做test.jar的jar包,里面有一个拥有main函数的mainclass:test.someClassName。我们就只要在MANIFEST.MF里面添加如下一句话:…

  • CAN总线协议

    CAN总线协议目录1.总体概述 1.1基本概念1.2通讯方式1.3为什么使用CAN?1.总体概述 1.1基本概念  CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。 1.2通讯方式  回顾前面学到的RS23.

  • easyUI的combobox实现级联

    easyUI的combobox实现级联easyUI的combobox实现级联

    2022年10月22日
  • vue基础教程总结篇,用最短的时间入门vue.js(持续更新…)

    vue基础教程总结篇,用最短的时间入门vue.js(持续更新…)目前,vue已经成为前端工程师必会的框架之一,这里简单总结一下,可以让您快速的入门vue,师傅带进门,修行靠个人,最主要的还是自己多动手,多实践,本专栏会持续更新。1.vue安装教程及简介2.vue计算属性computed与监听属性watch的基本使用3.Vue组件及自定义事件4.Vue过渡&动画&混入5.Vue路由的基本使用6.vue中Ajax(axios)及Ajax(vue-resource)的使用方法7.vues响应接口and实例8.vue目录.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号