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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 17:42   47   0

最近一个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     }

转载于:https://www.cnblogs.com/Miraclky-G/archive/2013/04/12/3016147.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP