关于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()的更多相关文章
- Delphi获取与设置系统时间格式,即GetLocaleInfo和SetLocaleInfo
在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字 ...
- 使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改
uses messages; Procedure SetDateFormat; //设置系统日期格式var buf:pchar; i:integer; p:DWORD;begin getmem(buf ...
- 让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)
如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期procedure TFrmQuerySale.FormShow(S ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- Microsoft Win32 to Microsoft .NET Framework API Map
Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles ...
- C#封装好的Win32API
Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...
- 英文不好也能快速"记忆" API
英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是W ...
- DELPHI下API简述(1800个API)
DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...
- API函数
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...
随机推荐
- matlab 机器学习相关函数、api
matlab 对数据集的默认组织方式是,X∈Rd×N d:行数,表示特征向量的长度: N:列数,表示样本的数目: 1. 模型.预测.mse % 加载 matlab 内置数据到内存 X = abalon ...
- ITFriend创业败局(一):选择创业方向和寻找合伙人,创业失败的2个关键点
这次创业惨淡收场,最主要的原因是没有选择一个合适的创业方向,没有找到合适的创业合伙人. 首先要说到创业方向,因为不同的创业方向需要组建不同的创业团队.我个人比较偏好,软件.网络.互联网等有一 ...
- 【b604】2K进制数
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 设r是个2K进制数,并满足以下条件: (1)r至少是个2位的2K进制数. (2)作为2K进制数,除最后一 ...
- 高性能分布式应用开发中间件ICE介绍
作为一个技术人员,你是否在为不断增长的数据量和日益复杂的业务逻辑而头疼不已,杂乱堆砌在一起的庞大业务让系统越来越脆弱,于是你想到了网格,想到了利用分布式来重组一个健壮的系统架构. 随后,RMI,EJB ...
- Cordova app 检查更新 ----创建项目、添加插件、修改插件(一)
原文:Cordova app 检查更新 ----创建项目.添加插件.修改插件(一) 使用Cordova 进行跨平台应用程序的开发 1.创建Cordova项目 $ cordova create hell ...
- List<Map<String, String>> 开启 Map<String, List<String>>
将List变成Map结构体,下面的文字是没有水平! 写作方法传送前土壤很长一段时间.我不知道有没有好的解决办法.我们也希望提供! Map<String, String> map1 = ne ...
- Verilog分频器
verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1.自己动手写了第一个verilog程序. 题目: 利用10M的时钟,设计一个单周期形状例如以下的周期波形. 思考: 最開始的想法是 ...
- TCP协议是如何保证可靠传输的【经典】
参考:http://blog.csdn.net/cmm0401/article/details/77878998 从特点上我们已经知道,TCP 是可靠的但传输速度慢 ,UDP 是不可靠的但传输速度快. ...
- Visual Studio Code同时debug多种代码的方式
今天看了一下,猜应该是configurations里面多写一个就行,试了下,真的可以同时debug Python和Go代码. 可以打断点.单步执行Python和Go代码. launch.json 如下 ...
- ios7 左右searchbar在设置cancelButton的title属性
经 [searchBarsetShowsCancelButton:YES];设置之后默认是"cancel",想改为中文的 在stackoverflow上參考了非常多方法都没用 这里 ...