码迷,mamicode.com
首页 > 其他好文 > 详细

CultureInfo.InvariantCulture 作用

时间:2014-05-05 11:49:33      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:strong   string   http   com   数据   使用   

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属性有关系。

CultureInfo.InvariantCulture 作用,布布扣,bubuko.com

CultureInfo.InvariantCulture 作用

标签:strong   string   http   com   数据   使用   

原文地址:http://www.cnblogs.com/caigen029/p/3706052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!