如何讲日期06-dec-1999格式转化为1999-12-06?(50分)

  • 主题发起人 主题发起人 netfun2000
  • 开始时间 开始时间
N

netfun2000

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,日期格式转换。
 
dec这个不知道怎么转
FormatDateTime('YY-MM-DD HH:MM:SS',)
 
已经完成。
function StrToDateEx(mStr: string): TDate

const
cShortMonthNames: array[1..12] of string = (
'Jan', 'Feb', 'Mar', 'Apr',
'May', 'Jun', 'Jul', 'Aug',
'Sep', 'Oct', 'Nov', 'Dec')

var
I: Integer

vOldShortDateFormat: string

begin
for I := 1 to 12 do
mStr := StringReplace(mStr, cShortMonthNames, IntToStr(I) + '-',
[rfIgnoreCase])

mStr := StringReplace(mStr, ',', '-', [rfReplaceAll])

mStr := StringReplace(mStr, ' ', '', [rfReplaceAll])

vOldShortDateFormat := ShortDateFormat

ShortDateFormat := 'mm-dd-yyyy'

try
Result := StrToDate(mStr)

finally
ShortDateFormat := vOldShortDateFormat

end

end
{ StrToDateEx }

对这个函数进行了修改就可以了。
 
比我厉害。呵呵,[:D]
 
不用这么复杂吧,呵呵
FormatDateTime('YY-MM-DD HH:MM:SS',)
 
当用户的日期格式不同时, 程序中的日期函数可能会出错(如StrToDate),一般在程序开始时,运行如下语句,统一日期格式。

//设置日期格式
SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, 'yyyy-MM-dd');
SetLocaleInfo(GetThreadLocale, LOCALE_SLONGDATE, 'yyyy''年''M''月''d''日''');
//设置时间格式
SetLocaleInfo(GetThreadLocale, LOCALE_STIMEFORMAT, 'HH:mm:ss');

这样以后的代码就不必担心日期格式的变化了。
 
var d:tdatetime;
begin

d:=strtodate('06-dec-1999');
FormatDateTime('YY-MM-DD HH:MM:SS',d);
end;

还需要写涵数吗?
 
var d:tdatetime;
begin

d:=strtodate('06-dec-1999');
FormatDateTime('YY-MM-DD HH:MM:SS',d);
end;

还需要写涵数吗?

'06-dec-1999' is not a valid date.
 
理论上'06-dec-1999' 是个有效的日期格式,通过设置全局ShortMonthNames数组,然后设置ShortDateFormat格式“dd-mmm-yyyy”是可以转换的,但实际上有问题,因为什么原因?未知!有明白的人可以告知一下。[:D]
 
FormatDateTime可以,但你要记得转过去后数据类型变化了.
 
FormatDateTime函数需要传个TDate类型的参数,'06-dec-1999'是个字符串,所以先要把'06-dec-1999'转为TDate类型。
如何转?直接使用strtodate函数是不行的。
可以使用function StrToDate(const S: string
const FormatSettings: TFormatSettings): TDateTime;转换,但这个函数需要传个TFormatSettings的参数,那就要先使用procedure GetLocaleFormatSettings(LCID: Integer
var FormatSettings: TFormatSettings);来获取现在系统的格式,然后再修改其中的字段内容,特别是ShortMonthNames和ShortDateFormat字段的内容,再传参。
我觉得思路是这样的,但执行是有问题,仍然转换不了。大家可以讨论下这个问题。有明白的高手不吝赐教。
另LCID等于2052,代表中文,其他值可去微软网站查。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
swish
S
S
回复
0
查看
1K
swish
S
后退
顶部