C# CultureInfo中常用的InvariantCulture
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相关推荐
- 【转】CultureInfo中重要的InvariantCulture
原贴地址:http://www.soaspx.com/dotnet/csharp/csharp_20110506_7607.html CultureInfo简述 CultureInfo类位于Syste ...
- CultureInfo中重要的InvariantCulture
CultureInfo简述 CultureInfo类位于System.Globalization命名空间内,这个类和这个命名空间许多人都不了解也认为不需要太多了解,实际上,你写的程序中会经常间接得使用 ...
- java 中常用的类
java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l static double abs(double a) 获取double 的绝对值 l sta ...
- Asp.NET中常用的一些优化性能的方法
ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能. 1:不要使用不必要的session 和ASP中一样,在不必要 ...
- Python中常用的数据分析工具(模块)有哪些?
本期Python培训分享:Python中常用的数据分析工具(模块)有哪些?Python本身的数据分析功能并不强,需要安装一些第三方的扩展库来增强它的能力.我们课程用到的库包括NumPy.Pandas. ...
- shell编程系列7--shell中常用的工具find、locate、which、whereis
shell编程系列7--shell中常用的工具find.locate.which.whereis1.文件查找之find命令语法格式:find [路径] [选项] [操作]选项 -name 根据文件名查 ...
- js中常用的对象—String的属性和方法
今天说一下,js中常用的内置对象--String对象 它有以下几个常用的属性: length prototype 有以下几个常用的方法: parseInt()转换为数字 parseFloat()转换为 ...
- 实战!工作中常用到哪些设计模式
前言 平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了.如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码.今天跟大家聊聊日常工作中,我都使用过哪些 ...
- mysql中拼接用什么_MySQL中常用的拼接语句的小结(代码示例)
本篇文章给大家带来的内容是关于MySQL中常用的拼接语句的小结(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言:在MySQL中 CONCAT ()函数用于将多个字符串 ...
最新文章
- 《Cortex-M0权威指南》之体系结构---异常和中断
- 十分钟就能回顾Spring常问的知识点,带你突击面试没问题!
- 基于HAproxy的web动静分离及输出状态检测页面
- 转:android git开源项目列表
- 程序员面试100题之四:求1+2+...+n
- java中sesion
- java 单例 饿汉式_Java-单例设计模式(懒汉与饿汉)
- maven构建java web项目(idea开发)
- 在Project中引用zedgraph控件
- 【主动声呐】——匹配滤波器
- 【数电】(二) 基本逻辑运算与逻辑门电路
- Navicat 创建mysql事件
- [微信小程序开发] mpvue 微信小程序开发使用SASS写样式
- jedate插件的使用
- 3D纹理贴图制软件The Foundry Mari for Mac
- html毕业设计论文,静态网页HTML设计毕业设计论文
- 最新MySql安装教学,非常详细
- C# 22. 新建文件夹
- nginx自动切割访问日志
- 关闭“Chromium 未正确关闭”提示
热门文章
- Ubuntu18.04 系统重装 若干问题及解决方法
- python实现系统公网和私网流量监控
- 【渝粤教育】国家开放大学2018年春季 7067-21T (1)康复护理学 参考试题
- 下载利器IDM下载及免费注册!
- 使用k8s实现灰度发布,金丝雀,蓝绿发布
- Ubuntu 22.04 为 Jellyfin 配置代理
- am服务器查找信息,am服务器
- (转载)类欧几里得(知识点整理+板子总结)
- JavaSE最新版(二)面向对象、String类、ArrayList
- Photoshop制作木板雕刻看图识字