C# CultureInfo中常用的InvariantCulture

本文参考自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());}

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

C# CultureInfo中常用的InvariantCulture相关推荐

  1. 【转】CultureInfo中重要的InvariantCulture

    原贴地址:http://www.soaspx.com/dotnet/csharp/csharp_20110506_7607.html CultureInfo简述 CultureInfo类位于Syste ...

  2. CultureInfo中重要的InvariantCulture

    CultureInfo简述 CultureInfo类位于System.Globalization命名空间内,这个类和这个命名空间许多人都不了解也认为不需要太多了解,实际上,你写的程序中会经常间接得使用 ...

  3. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  4. Asp.NET中常用的一些优化性能的方法

    ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能. 1:不要使用不必要的session 和ASP中一样,在不必要 ...

  5. Python中常用的数据分析工具(模块)有哪些?

    本期Python培训分享:Python中常用的数据分析工具(模块)有哪些?Python本身的数据分析功能并不强,需要安装一些第三方的扩展库来增强它的能力.我们课程用到的库包括NumPy.Pandas. ...

  6. shell编程系列7--shell中常用的工具find、locate、which、whereis

    shell编程系列7--shell中常用的工具find.locate.which.whereis1.文件查找之find命令语法格式:find [路径] [选项] [操作]选项 -name 根据文件名查 ...

  7. js中常用的对象—String的属性和方法

    今天说一下,js中常用的内置对象--String对象 它有以下几个常用的属性: length prototype 有以下几个常用的方法: parseInt()转换为数字 parseFloat()转换为 ...

  8. 实战!工作中常用到哪些设计模式

    前言 平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了.如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码.今天跟大家聊聊日常工作中,我都使用过哪些 ...

  9. mysql中拼接用什么_MySQL中常用的拼接语句的小结(代码示例)

    本篇文章给大家带来的内容是关于MySQL中常用的拼接语句的小结(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言:在MySQL中 CONCAT ()函数用于将多个字符串 ...

最新文章

  1. 《Cortex-M0权威指南》之体系结构---异常和中断
  2. 十分钟就能回顾Spring常问的知识点,带你突击面试没问题!
  3. 基于HAproxy的web动静分离及输出状态检测页面
  4. 转:android git开源项目列表
  5. 程序员面试100题之四:求1+2+...+n
  6. java中sesion
  7. java 单例 饿汉式_Java-单例设计模式(懒汉与饿汉)
  8. maven构建java web项目(idea开发)
  9. 在Project中引用zedgraph控件
  10. 【主动声呐】——匹配滤波器
  11. 【数电】(二) 基本逻辑运算与逻辑门电路
  12. Navicat 创建mysql事件
  13. [微信小程序开发] mpvue 微信小程序开发使用SASS写样式
  14. jedate插件的使用
  15. 3D纹理贴图制软件The Foundry Mari for Mac
  16. html毕业设计论文,静态网页HTML设计毕业设计论文
  17. 最新MySql安装教学,非常详细
  18. C# 22. 新建文件夹
  19. nginx自动切割访问日志
  20. 关闭“Chromium 未正确关闭”提示

热门文章

  1. Ubuntu18.04 系统重装 若干问题及解决方法
  2. python实现系统公网和私网流量监控
  3. 【渝粤教育】国家开放大学2018年春季 7067-21T (1)康复护理学 参考试题
  4. 下载利器IDM下载及免费注册!
  5. 使用k8s实现灰度发布,金丝雀,蓝绿发布
  6. Ubuntu 22.04 为 Jellyfin 配置代理
  7. am服务器查找信息,am服务器
  8. (转载)类欧几里得(知识点整理+板子总结)
  9. JavaSE最新版(二)面向对象、String类、ArrayList
  10. Photoshop制作木板雕刻看图识字