C# CultureInfo类案例详解

作者:HOLD ON! 时间:2023-04-20 05:00:45 

c#中的CultureInfo类

CultureInfo类位于System.Globalization命名空间内,这个类和命名空间许多人都不是很熟悉,实际我们在写程序写都经常间接性的接触这个类,当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是说,也就是不同的CultureInfo下,这些操作的结果可能会不一样,由于我们大部分开发部署都是在同一种语言环境中,平日里可能没有感觉到它的用处,如果你的开发的项目是给国外用户用的,有可能在你机器上运行输出是一种效果,在客户机器上是另一种输出效果,这句需要用到CultureInfo类了,对使用用户来说,这也是ms提供的人性化的一面(比方说,同样是日期,中文环境输出符合中国人的习惯,德语环境中的输出符合德国人的习惯,这是默认的输出方式),但对开发人员和服务数据中心来说,就要选择是保证统一的输出,还是用ms的默认方式了
code如下:


static readonly string[] CultureSources = { "en-us", "zh-cn", "ar-iq", "de-de" };
       static readonly Random Ran = new Random(Environment.TickCount);

static void Main()
       {
           for (int i = 0; i < CultureSources.Length; i++){
               ThreadPool.QueueUserWorkItem(Client, i);
}
           Console.ReadLine();
       }

static void Client(object obj)
       {
           int id = (int)obj;
           Thread.Sleep(Ran.Next(1000));
           CultureInfo culture = CultureInfo.GetCultureInfo(CultureSources[id]);            
           Thread.CurrentThread.CurrentCulture = culture;
           Console.WriteLine("操作系统语言设置成{0}\n数据输出是:{1}\n", culture.DisplayName, DateTime.Now.ToShortDateString());
       }

运行结果如下:

C# CultureInfo类案例详解

结果看到了吧,同样的DateTime.Now.ToShortDateString(),在英语-美国,中文-中国,阿拉伯语-伊拉克和德语-德国的不同环境下,日期输出格式竟然有如此不同的输出结果,这样对使用的用户来说是很友好的,单对编程人员来说,如果对这些数据要处理,就要考虑不同的语言环境中,该怎么处理了,同时,这些数据让数据中心服务器情何以堪啊……
原因分析:
.NET会考虑当前线程的CultureInfo,即Thread.CurrentThread.CurrentCulture(或者CultureInfo.CurrentCulture),并根据CultureInfo,进行相应地区文化的数据处理,要解决这个问题,这样设置
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;//和new CultureInfo("");一样,使用固定区域性,固定区域性不区分区域性;它与英语语言关联,但不与任何国家/地区关联
这样不管客户端运行在什么语言环境下,输出的时间格式都是统一的,方面数据中心服务器对数据做后续处理,结果如下图:

C# CultureInfo类案例详解

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

来源:https://blog.csdn.net/cxu123321/article/details/90511756

标签:C#,CultureInfo
0
投稿

猜你喜欢

  • spring Boot查询数据分页显示的方法实例

    2023-04-28 13:30:08
  • Java回调函数与观察者模式实例代码

    2023-11-16 17:30:11
  • Android百度地图应用之MapFragment的使用

    2022-07-07 21:16:37
  • RestTemplate请求失败自动重启机制精讲

    2021-09-06 02:03:38
  • 在java中ArrayList集合底层的扩容原理

    2023-12-19 11:12:15
  • 如何在mapper文件中使用in("str1","str2")

    2023-07-10 10:40:51
  • SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务(微服务实战)

    2022-12-04 13:22:53
  • C#/VB.NET中从 PDF 文档中提取所有表格

    2023-04-07 09:11:03
  • mybatis中mapper-locations的作用

    2023-11-10 18:02:58
  • MyBatis批量添加、修改和删除

    2023-12-07 05:13:31
  • 完整的医院就诊挂号系统基于Spring MVC + Spring + MyBatis实现

    2022-06-03 18:07:05
  • 详解Android应用开发中Intent的作用及使用方法

    2021-11-20 04:45:03
  • 关于MyBatis中SqlSessionFactory和SqlSession简解

    2022-02-18 13:57:37
  • C#实现学生成绩管理系统

    2021-06-05 22:51:31
  • Java经典面试题汇总:网络编程

    2021-12-12 11:53:33
  • C#读写txt文件多种方法实例代码

    2023-08-28 01:20:01
  • 深度理解Java访问修饰符

    2021-10-26 17:16:08
  • java 较大数据量取差集,list.removeAll性能优化详解

    2022-11-06 16:52:15
  • C#使用NPOI将excel导入到list的方法

    2023-11-17 22:49:09
  • Android 自定义View实现芝麻分曲线图效果

    2022-11-22 01:59:13
  • asp之家 软件编程 m.aspxhome.com