关于SetLocaleInfo()

原文:关于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
网络矩阵/视频监控平台

时间: 2024-10-22 02:24:09

关于SetLocaleInfo()的相关文章

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

在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字符串形式的日期时间转换成 TDateTime 然后再做其他操作. 在进行时间或日期的转换时,会使用系统当前设定的时间日期格式.而如果时间日期格式与字符串中的表示方式不相符,会使转换过程失败.例如当前短日期格式设定为'yyyy/MM/dd',而要转为 '2006-10-20'这样的字符串为日期,就会报

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

如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期procedure TFrmQuerySale.FormShow(Sender: TObject);varsDate: string;begininherited;// 默认查当天的销售数据sDate := FormatDateTime('yyyy-mm-dd', Now);DateTimePicker1.DateTime := StrToDateTime(sDat

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

uses messages; Procedure SetDateFormat; //设置系统日期格式var buf:pchar; i:integer; p:DWORD;begin getmem(buf,100); i:=100; //i必须在调用前赋值为buf缓冲区的长度.如果设为0或负值,将取不到设置的值 GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,buf,i); //取当前用户设置,短日期格式. if trim(string(buf

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

英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是Window API函数例表,大家可以试试效果特别好! AbnormalTermination AbortDoc AbortPath AbortPrinter AbortProc AbortSystemShutdown AccessNtmsLibraryDoor ActivateKeyboardLay

Windows API 大全

常用Windows API1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDis

DELPHI下API简述(1800个API)

DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API

linux API函数大全

还没有认真研读过,今晚在其他博客上找了比较久,今晚时间也不多了,等有空再细看 先复制先 获取当前执行路径:getcwd 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建同一个网络资源的连接  WNetAddConnection3 创建同一个网络资源的连接  WNetCancelConnection 结束一个网络连接  WNetCancelConnection2 结束一个网络连接  WNetCloseEnum

Delphi 常用API 函数(好多都没见过)

AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup 判断屏幕上是否存在任何弹出式窗口ArrangeIconicWindows 排列一个父窗口的最小化子窗口AttachThreadInput 连接线程输入函数BeginDeferWindowPos 启动构建一系列新窗口位置的过程BringWindowToTop 将指定的窗口带至窗口列表顶部CascadeWindows 以层叠方式排列窗口ChildWindowFromPoint 返回父窗口中包含了

delphi 常用api

Delphi 常用API 函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 AttachThreadInput 连接线程输入函数 BeginDeferWindowPos 启动构建一系列新窗口位置的过程 BringWindowToTop 将指定的窗口带至窗口列表顶部 CascadeWindows 以层叠方式排列窗口 ChildWi