原文:关于SetLocaleInfo()

此函数用于设置系统的一些本地信息, 非常有用.

比如日期格式为'yyyy/mm/dd'时, 稍微不注意,有些程序语句会报错.

以下资料网络收集:

1. SetLocaleInfo()中 LCTYPE values 的具体意义

出自: http://hi.baidu.com/stormsxf/blog/item/7395b3000ed2e015728b65a5.html

BOOL SetLocaleInfo(
LCID Locale,
LCTYPE LCType,
LPWTSTR lpLCData
);

其中LCTYPE LCType参数的具体意义如下

Public:

CONSTANT Long LOCALE_SCURRENCY = 20 //本地语言货币符号
CONSTANT Long LOCALE_SINTLSYMBOL = 21 //国际货币符号
CONSTANT Long LOCALE_SMONDECIMALSEP = 22 //小数分隔符
CONSTANT Long LOCALE_SMONTHOUSANDSEP = 23 //千位分隔符
CONSTANT Long LOCALE_SMONGROUPING = 24 //数据分组方式
CONSTANT Long LOCALE_ICURRDIGITS = 25 //# 本地数字
CONSTANT Long LOCALE_IINTLCURRDIGITS = 26 //# 国际数字
CONSTANT Long LOCALE_ICURRENCY = 27 //货币正数表示模式
CONSTANT Long LOCALE_INEGCURR = 28 //货币负数表示模式

CONSTANT Long LOCALE_IPOSSIGNPOSN = 82 //货币正数符号的位置
CONSTANT Long LOCALE_INEGSIGNPOSN = 83 //货币负数符号的位置
CONSTANT Long LOCALE_IPOSSYMPRECEDES = 84 //正数中,货币符号位于值之前
CONSTANT Long LOCALE_IPOSSEPBYSPACE = 85 //正数中,货币符号与值之间被空格分开
CONSTANT Long LOCALE_INEGSYMPRECEDES = 86 //负数中,货币符号位于值之前
CONSTANT Long LOCALE_INEGSEPBYSPACE = 87 //负数中,货币符号与值之间被空格分开
CONSTANT Long LOCALE_FONTSIGNATURE = 88 //font signature

CONSTANT Long LOCALE_SENGCURRNAME = 4103 //货币的英语名称
CONSTANT Long LOCALE_SNATIVECURRNAME = 4104 //货币的当地语言名称

CONSTANT Long LOCALE_ILANGUAGE = 1 //语言ID
CONSTANT Long LOCALE_SLANGUAGE = 2 //语言区域名称
CONSTANT Long LOCALE_SENGLANGUAGE = 4097 //语言英语名称
CONSTANT Long LOCALE_SABBREVLANGNAME = 3 //语言名称缩写
CONSTANT Long LOCALE_SNATIVELANGNAME = 4 //当地语言名称
CONSTANT Long LOCALE_ICOUNTRY = 5 //国家代码
CONSTANT Long LOCALE_SCOUNTRY = 6 //国家本地名称
CONSTANT Long LOCALE_SENGCOUNTRY = 4098 //国家英语名称
CONSTANT Long LOCALE_SABBREVCTRYNAME = 7 //国家名称缩写
CONSTANT Long LOCALE_SNATIVECTRYNAME = 8 //当地语言国家名称
CONSTANT Long LOCALE_IDEFAULTLANGUAGE = 9 //缺省语言ID
CONSTANT Long LOCALE_IDEFAULTCOUNTRY = 10 //缺省国家代码
CONSTANT Long LOCALE_IDEFAULTCODEPAGE = 11 //缺省的OEM代码
CONSTANT Long LOCALE_SLIST = 12 //list item separator
CONSTANT Long LOCALE_IDEFAULTANSICODEPAGE = 4100 //缺省的ASCII代码
CONSTANT Long LOCALE_IDEFAULTMACCODEPAGE = 4113 //缺省的MACINTOH代码
CONSTANT Long LOCALE_IMEASURE = 13 //0 = 公制, 1 = 美制
CONSTANT Long LOCALE_SDECIMAL = 14 //decimal separator
CONSTANT Long LOCALE_STHOUSAND = 15 //thousand separator
CONSTANT Long LOCALE_SGROUPING = 16 //digit grouping
CONSTANT Long LOCALE_IDIGITS = 17 //number of fractional digits
CONSTANT Long LOCALE_ILZERO = 18 //leading zeros for decimal
CONSTANT Long LOCALE_SNATIVEDIGITS = 19 //native ascii 0-9

//Windows NT 4.0/2000/XP
CONSTANT Long LOCALE_SISO639LANGNAME = 89 //ISO 语言缩写名称
CONSTANT Long LOCALE_SISO3166CTRYNAME = 90 //ISO 国家缩写名称
//Windows 2000/XP
CONSTANT Long LOCALE_IDEFAULTEBCDICCODEPAGE = 4114 //缺省的EBCDIC代码
CONSTANT Long LOCALE_SSORTNAME = 4115 //排序名称

CONSTANT Long LOCALE_INEGNUMBER = 4112 //negative number mode

CONSTANT Long LOCALE_SDATE = 29 //日期分隔符
CONSTANT Long LOCALE_STIME = 30 //时间风隔符
CONSTANT Long LOCALE_SSHORTDATE = 31 //短日期格式
CONSTANT Long LOCALE_SLONGDATE = 32 //长日期格式
CONSTANT Long LOCALE_STIMEFORMAT = 4009 //时间格式
CONSTANT Long LOCALE_IDATE = 33 //短日期格式的排列顺序
CONSTANT Long LOCALE_ILDATE = 34 //长日期格式的排列顺序
CONSTANT Long LOCALE_ITIME = 35 //时间格式标示符号
CONSTANT Long LOCALE_ITIMEMARKPOSN = 4011 //时间标记符位置
CONSTANT Long LOCALE_ICENTURY = 36 //世纪识别符 (短日期)
CONSTANT Long LOCALE_ITLZERO = 37 //时间数字前面前导0
CONSTANT Long LOCALE_IDAYLZERO = 38 //日期数字前面前导0 (短日期)
CONSTANT Long LOCALE_IMONLZERO = 39 //月份数字前面前导0 (短日期)
CONSTANT Long LOCALE_S1159 = 40 //AM 指示符
CONSTANT Long LOCALE_S2359 = 41 //PM 指示符
CONSTANT Long LOCALE_ICALENDARTYPE = 4105 //日历类型指示符
CONSTANT Long LOCALE_IPAPERSIZE = 4106 //0 = letter, 1 = a4, 2 = legal, 3 = a3
CONSTANT Long LOCALE_IOPTIONALCALENDAR = 4107 //其它日历类型指示符
CONSTANT Long LOCALE_IFIRSTDAYOFWEEK = 4108 //一周中的第一天指示符
CONSTANT Long LOCALE_IFIRSTWEEKOFYEAR = 4109 //一年中的第一周指示符
CONSTANT Long LOCALE_SDAYNAME1 = 42 //星期一的长名称
CONSTANT Long LOCALE_SDAYNAME2 = 43 //星期二的长名称
CONSTANT Long LOCALE_SDAYNAME3 = 44 //星期三的长名称
CONSTANT Long LOCALE_SDAYNAME4 = 45 //星期四的长名称
CONSTANT Long LOCALE_SDAYNAME5 = 46 //星期五的长名称
CONSTANT Long LOCALE_SDAYNAME6 = 47 //星期六的长名称
CONSTANT Long LOCALE_SDAYNAME7 = 48 //星期天的长名称
CONSTANT Long LOCALE_SABBREVDAYNAME1 = 49 //星期一的缩写名称
CONSTANT Long LOCALE_SABBREVDAYNAME2 = 50 //星期二的缩写名称
CONSTANT Long LOCALE_SABBREVDAYNAME3 = 51 //星期三的缩写名称
CONSTANT Long LOCALE_SABBREVDAYNAME4 = 52 //星期四的缩写名称
CONSTANT Long LOCALE_SABBREVDAYNAME5 = 53 //星期五的缩写名称
CONSTANT Long LOCALE_SABBREVDAYNAME6 = 54 //星期六的缩写名称
CONSTANT Long LOCALE_SABBREVDAYNAME7 = 55 //星期日的缩写名称
CONSTANT Long LOCALE_SMONTHNAME1 = 56 //一月的长名称
CONSTANT Long LOCALE_SMONTHNAME2 = 57 //二月的长名称
CONSTANT Long LOCALE_SMONTHNAME3 = 58 //三月的长名称
CONSTANT Long LOCALE_SMONTHNAME4 = 59 //四月的长名称
CONSTANT Long LOCALE_SMONTHNAME5 = 60 //五月的长名称
CONSTANT Long LOCALE_SMONTHNAME6 = 61 //六月的长名称
CONSTANT Long LOCALE_SMONTHNAME7 = 62 //七月的长名称
CONSTANT Long LOCALE_SMONTHNAME8 = 63 //八月的长名称
CONSTANT Long LOCALE_SMONTHNAME9 = 64 //九月的长名称
CONSTANT Long LOCALE_SMONTHNAME10 = 65 //十月的长名称
CONSTANT Long LOCALE_SMONTHNAME11 = 66 //十一月的长名称
CONSTANT Long LOCALE_SMONTHNAME12 = 67 //十二月的长名称
CONSTANT Long LOCALE_SMONTHNAME13 = 4110 //十三月的长名称 (如果存在)
CONSTANT Long LOCALE_SABBREVMONTHNAME1 = 68 //一月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME2 = 69 //二月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME3 = 70 //三月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME4 = 71 //四月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME5 = 72 //五月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME6 = 73 //六月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME7 = 74 //七月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME8 = 75 //八月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME9 = 76 //九月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME10 = 77 //十月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME11 = 78 //十一月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME12 = 79 //十二月的缩写名称
CONSTANT Long LOCALE_SABBREVMONTHNAME13 = 4111 //十三月的缩写名称 (如果存在)
CONSTANT Long LOCALE_SPOSITIVESIGN = 80 //positive sign
CONSTANT Long LOCALE_SNEGATIVESIGN = 81 //negative sign

CONSTANT Long LOCALE_SYEARMONTH = 4102 //year month format string
CONSTANT Long LOCALE_IDIGITSUBSTITUTION = 4116 //0 = none, 1 = context, 2 = native digit

2. Delphi获得与设置系统时间格式

出自: http://www.cnblogs.com/mingdep/archive/2012/1/1.html

在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字符串形式的日期时间转换成 TDateTime 然后再做其他操作。
在进行时间或日期的转换时,会使用系统当前设定的时间日期格式。而如果时间日期格式与字符串中的表示方式不相符,会使转换过程失败。例如当前短日期格式设定为'yyyy/MM/dd',而要转为 '2006-10-20'这样的字符串为日期,就会报错,说这不是一个有效的日期。
所以在进行转换前,要确保系统的日期时间格式与程序中使用的相符。一种方法是在安装时由安装程序设置,或者明确告诉用户必须设置成要求格式。另一种就是程序在启动时,自动设定为需要的格式,退出程序时再恢复原来的设置。

需要用到的有两个Windows API,一个是 GetLocaleInfo,一个是 SetLocaleInfo

查API说明:
int GetLocaleInfo(
LCID Locale, // locale identifier ,设置信息的范围,是系统级,还是当前用户
LCTYPE LCType, // type of information,设置信息的类型
LPTSTR lpLCData, // address of buffer for information,设置成的值,必须用 pchar的格式传进去
int cchData // size of buffer
);

BOOL SetLocaleInfo(
LCID Locale, // locale identifier,同上
LCTYPE LCType, // type of information to set
LPCTSTR lpLCData // pointer to information to set
);

两个函数的参数很类似,其中 Locale可以取两个值:LOCALE_SYSTEM_DEFAULT,表示要操作的是系统默认的设置; LOCALE_USER_DEFAULT,表示要操作的是当前用户的设置。还可以取其他值,用于具体修改某种语言区域的设置。一般取 LOCALE_USER_DEFAULT。
LCType,表示要操作信息的类型,也就是要操作的是哪一种设置。可用的值有很多,Delphi的联机帮助,或者查MSDN,都有一个大列表。但跟日期时间格式相关的一共有这几个:
LOCALE_SSHORTDATE :短日期格式
LOCALE_SLONGDATE :长日期格式
LOCALE_STIMEFORMAT:时间格式
另外 LOCALE_STIME 表示时间分隔符,LOCALE_SDATE 表示日期分隔符。可以单独使用,也可以在使用 LOCALE_SSHORTDATE 和 LOCALE_STIMEFORMAT 的同时一并修改,所以不需要单独操作。
使用GetLocaleInfo或SetLocaleInfo时,每次只能操作一个类型。比如要同时设置短日期格式、长日期格式、时间格式,就必须分别用三个类型代号调用三次 SetLocaleInfo。
还要一个要注意的问题是,设置日期时间格式后,应该向当前系统的激活窗口广播发送 WM_SETTINGCHANGE 消息,否则即使修改了,程序里还是不能用的。
以下是获取和设置的程序片断。

1.//获取时间日期格式

procedure GetDateTimeFormat();
var
buf:pchar;
i:integer;
GPrevShortDate,GPrevLongDate,GPrevTimeFormat:string;
begin
getmem(buf,100);
i:=100; //i必须在调用前赋值为buf缓冲区的长度。如果设为0或负值,将取不到设置的值
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,buf,i); //取当前用户设置,短日期格式。
GPrevShortDate:=string(buf);
i:=100;
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SLONGDATE,buf,i); //取长日期格式
GPrevLongDate:=string(buf);
i:=100;
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_STIMEFORMAT,buf,i); //取时间格式
GPrevTimeFormat:=string(buf);
FreeMem(buf);
end;
2.//设置时间格式

procedure SetDateTimeFormat();
var
p:DWORD;
begin
SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,pchar('yyyy-MM-dd')); //短日期
SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SLONGDATE,pchar('yyyy''年''M''月 ''d''日'''));
SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_STIMEFORMAT,pchar('H:mm:ss')); //设置时间
SendMessageTimeOut(HWND_BROADCAST,WM_SETTINGCHANGE,0,0,SMTO_ABORTIFHUNG,10,p);
//设置完成后必须调用,通知其他程序格式已经更改,否则即使是程序自身也不能使用新设置的格式
end;

在程序初始化时调用GetDateTimeFormat,将取出的设置保存起来,然后用SetDateTimeFormat设置需要的格式。在程序退出时再次调用SetDateTimeFormat将保存的值写回去。

简捷安防 欢迎试用
http://www.jianjiesoft.com
网络矩阵/视频监控平台

关于SetLocaleInfo()的更多相关文章

  1. Delphi获取与设置系统时间格式,即GetLocaleInfo和SetLocaleInfo

    在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字 ...

  2. 使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改

    uses messages; Procedure SetDateFormat; //设置系统日期格式var buf:pchar; i:integer; p:DWORD;begin getmem(buf ...

  3. 让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)

    如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期procedure TFrmQuerySale.FormShow(S ...

  4. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  5. Microsoft Win32 to Microsoft .NET Framework API Map

    Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles   ...

  6. C#封装好的Win32API

    Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...

  7. 英文不好也能快速"记忆" API

    英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是W ...

  8. DELPHI下API简述(1800个API)

    DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...

  9. API函数

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

随机推荐

  1. Git之同一台电脑如何连接多个远程仓库

    Git之同一台电脑如何连接多个远程仓库 一.总结 一句话总结: 1.git使用.git目录里面的内容(ssh或用户名密码)来自动和远程仓库通信 2.在不同的仓库中配置不同的.git目录,可以连接不同的 ...

  2. python3 numpy基本用法归纳总结

    安装numpy : pip install numpy numpy数组生成方法总结 In [4]: import numpy as np #使用列表生成一个一维数组 data = [1,2,3,4,5 ...

  3. php课程 6-20 字符串基础和去除空格和字符串填补函数

    php课程 6-20  字符串基础和去除空格和字符串填补函数 一.总结 一句话总结: 二.字符串 字符串定义:$str='hello world!'; 输出字符串:echo $str;print $s ...

  4. tensorflow 的使用流程

    1. optimizer.minimize 与 global_step optimizer = tf.train.**(learning_rate) global_step = tf.Variable ...

  5. 一个完整的Erlang应用

    http://blog.chinaunix.net/uid-25876834-id-3308693.html 这里介绍构建一个完整的Erlang/OTP应用的例子,最后还给出了一个在实际生成环境中,如 ...

  6. Java堆/栈/常量池以及String的详细详解(转)------经典易懂系统

    一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...

  7. 【BZOJ 1028】[JSOI2007]麻将

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1028 [题意] [题解] /* 枚举新加入的一张牌是哪一张牌; 然后尝试把它加进去; ...

  8. SpringBoot使用jsp作为视图模板&常规部署

    springboot其实并不推荐使用jsp作为视图模板,其默认采用Thymeleaf作为模板,出于对其没有研究,故考虑目前阶段仍然使用jsp作为视图模板.下面就展开实践案例过程: 1.首先创建一个js ...

  9. [think in java] 第8章 多态

    多态 "封装"通过合并特征和行为来创建新的数据类型. "多态"的作用则是消除类型之间的耦合关系. 方法调用绑定 定义:将一个方法调用同一个方法主题关联起来被称为 ...

  10. New in 10.2.2: C++ and Debugger Improvements

    In RAD Studio 10.2.2, we've made a number of great quality improvements for the C++ toolchain and fo ...