CultureInfo.InvariantCulture 作用

Sql的处理
经常会遇到拼sql的情况,将datetime拼到sql中以前的写法不统一,有直接写DateTime.ToString()的,有写DateTime.ToShortDateString(),还有DateTime.ToString("yyyy-MM-dd").总之,写法不一。这些方法都和
Thread.CurrentThread.CurrentCulture有关系,这就是当前线程的文化。在应用程序启动时,会复制操作系统的区域设置到CurrentCulture中,直接导致了不同的问题设置,导致ToString()的结果不同。例如。设置为中文(台湾)时为2008/7/30
下午 08:49:43,设置为中国(香港特别行政区)为30/7/2008
20:49:43,这些ToString()的格式直接拼到sql中执行,会报错,日期格式无法解析正确。

看到网上提到了有2个格式是不受语言影响的ISO,ISO 8601,使用这2中格式就能避免上面的问题,

c#
的表示方法是DateTime.Now.ToString(‘s‘,DateTimeFormatInfo.InvariantInfo),但是这个没有毫秒,所以使用自定义的格式

DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fff",DateTimeFormatInfo.InvariantInfo);这样日期的序列化和反序列化都可以用这个格式啦。

"DateTimeFormatInfo.InvariantInfo"可以替换成CultureInfo.InvariantCulture
MSDN上的解释是;

CultureInfo.InvariantCulture 属性

获取不依赖于区域性(固定)的 CultureInfo。 
固定区域性不区分区域性。可以使用空字符串
("") 按名称或者按区域性标识符 0x007F
来指定固定区域性。InvariantCulture 检索固定区域性的实例。它与英语语言关联,但不与任何国家/地区关联。它几乎可用在要求区域性的“全局化”命名空间中的所有方法中。

要做到国际化还需要注意一个问题,数据库存储的日期时间需要存UTC时间,这个时间是一个标准时间和时区就没有关系了。举个例子,在北京时间和越南河内的时间相差一个小时,在越南发送一个信息存入数据库,在北京这边看这条信息的时间应该是同一个时间。所以现在就存在一个问题,如果我们显示的时间都是本地时间,就需要将UTC时间存入数据库中,因为越南的本地时间和北京的本地时间差一个小时呢?除非给客户显示的是跟时区没有关系的UTC时间。本地时间和UTC时间的转化也很简单,C#代码是

datetime.ToUniversalTime();
datetime.ToLocalTime();

这种转化跟datetime.Kind属性有关系。

时间: 2024-10-27 08:32:03

CultureInfo.InvariantCulture 作用的相关文章

CultureInfo中重要的InvariantCulture(转)

CultureInfo简述 CultureInfo类位于System.Globalization命名空间内,这个类和这个命名空间许多人都不了解也认为不需要太多了解,实际上,你写的程序中会经常间接得使用这些类. 简单的说:当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是不同的CultureInfo下,这些操作的结果可能会不一样.这里要介绍一下非常容易被忽视的InvariantCulture. 通过示例了解InvariantCulture 前面提到过,不同的Cultu

System.Globalization.CultureInfo.cs

ylbtech-System.Globalization.CultureInfo.cs 1.返回顶部 1. #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll #endreg

ASP.NET WebApi 路由配置

一.路由介绍 ASP.NET Web API路由是整个API的入口.我们访问某个资源就是通过路由映射找到对应资源的URL.通过URL来获取资源的. 对于ASP.NET Web API内部实现来讲,我们的请求最终将定位到一个具体的Action上.所以说,ASP.NET Web API路由就是把客户端请求映射到对应的Action上的过程. 二.两种路由模式 2.1 模板路由 模板路由是ASP.NET Web API默认提供的路由.下面我们就简单讲解此中路由的用法. 默认模板路由 模板路由使用前需要定

ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

原文:ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用 在开发中动态在地图上添加文字信息,可以使用TextSymbol添加文字 //动态添加文本 TextSymbol textSymbol = new TextSymbol() { FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"), Foreground = new System.Wi

Tests

1. DateTime.Parse(myString); 这段代码有什么问题? A:区域信息即CultureInfo没有指定.如果不指定的话,它将采用默认的机器级的设置(见:控制面板->区域和语言选项)并使用这个设置来决定这个字符串即myString怎样被解释.所以如果你传入“5/2/2005”且你的区域设置为En-US,则它会被解释为May 2nd 2005,但是如果你的区域设置为Hindi-India,则它会被解释为5th Feb 2005! 参考下面的代码示例: 1 string sDat

ASP.NET MVC 4 (九) 模型绑定

模型绑定指的是MVC从浏览器发送的HTTP请求中为我们创建.NET对象,在HTTP请求和C#间起着桥梁的作用.模型绑定的一个最简单的例子是带参数的控制器action方法,比如我们注册这样的路径映射: routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Inde

ActionResult

public abstract class ActionResult { public abstract void ExecuteResult(ControllerContext context); } EmptyResult 无论一个Action返回值是Void还是其他数据类型,都会创建相应的ActionResult. 如果一个Action方法的返回值时Void或者Null,会生成一个EmptyResult对象. EmptyResult主要起到了适配器的作用,让所有的用法保持一致. Actio

.NET/ASP.NET Routing路由(深入解析路由系统架构原理)

出处:http://www.cnblogs.com/wangiqngpei557/ 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1UrlRoutingModule 对象内部结构 4.2RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3RouteValueDictionary.Rou

.net面試題

初级.NET开发人员 - 任何使用.NET的人都应知道的 1. 描述线程与进程的区别? 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在.进程可以定义程序的一个实例,但它只是占据应用程序所使用的地址空间.为了让进程完成一定的工作,进程必须至少占有一个线程,这个线程即为主线程,默认程序的工作都在这个主线程中完成,可以通过程序创建多个线程,使多个线程可以同时运行(多CPU支持下),这就是多线程技术. 线程(Thread)与进程(Process)二者都定义了