修改系统默认区域语言日期格式

      最近一个EF+WCF的项目中需要使用Expression传递查询条件,有的条件中会包含对DateTime类型的参数进行判断。

      例如最常见的 order=>order.OrderDate > DateTime.Now;

      这种用法在正常情况下是没有问题的,但是如果客户端和服务器端的语言区域不一样,就会造成通过WCF传递过后,DateTime类型的变量无法识别。

      例如一般中文简体的默认日期格式为yyyy-MM-dd,中文繁体的格式为:yyyy/MM/dd,这样的话,当客户端与服务器端区域语言不同的时候,传参就会报错。

      网上找了解决方法,客户端直接修改系统的默认语言格式就好,可以确定保持和服务器统一。

     

     代码如下,一般在程序启动的时候就设定就没问题了。

 1 public class LocalLanguage
 2     {
 3         [DllImport("kernel32.dll", EntryPoint = "GetSystemDefaultLCID")]
 4         public static extern int GetSystemDefaultLCID();
 5         [DllImport("kernel32.dll", EntryPoint = "SetLocaleInfoA")]
 6         public static extern int SetLocaleInfo(int Locale, int LCType, string lpLCData);
 7         public const int LOCALE_SLONGDATE = 0x20;
 8         public const int LOCALE_SSHORTDATE = 0x1F;
 9         public const int LOCALE_STIME = 0x1003;
10 
11         public static void SetDateTimeFormat()
12         {
13             try
14             {
15                 int x = GetSystemDefaultLCID();
16                 SetLocaleInfo(x, LOCALE_STIME, "HH:mm:ss");        //时间格式  
17                 SetLocaleInfo(x, LOCALE_SSHORTDATE, "yyyy-MM-dd");   //短日期格式    
18                 SetLocaleInfo(x, LOCALE_SLONGDATE, "yyyy-MM-dd");   //长日期格式   
19             }
20             catch (Exception ex)
21             {
22                 Console.WriteLine(ex);
23             }
24         }  
25     }

 

posted @ 2013-04-12 10:39  葡萄天花板  阅读(642)  评论(0编辑  收藏  举报