2012-07-12 93 views
0

谁能在我的问题中提出建议。 我将日期格式设置为'JUL/12 - 12 15:35',但是当使用StrToDateTime时,请给EConvertError。Delphi函数崩溃 - StrToDateTime

如何处理包含2日期分隔符的格式?


使用下面的代码

function LocaleFormatStrToDateTime(const S: string): TDateTime; 
     var 
      LFormatSettings: TFormatSettings; 
     begin 
      LFormatSettings := GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT); 
      LFormatSettings.ShortTimeFormat := FormatSettings.ShortTimeFormat; 
      LFormatSettings.TimeSeparator := FormatSettings.TimeSeparator; 
      Result := StrToDateTime(S, LFormatSettings); 
     end; 


---------- 

**

最好的解决办法是使用jvDateUtil.StrToDate *

**

+0

请提供您用来调用此函数的'S'参数的示例值 – Morfic 2012-07-12 13:01:49

+0

'JUL/12 - 12 15:35' – YoungMaster 2012-07-12 13:04:22

+0

这里使用的是哪种日期格式?它不是任何地方的标准格式(至少我从来没有碰过它,它不是我可以在控制面板中为日期/时间格式设置的任何东西)。 – 2012-07-12 13:11:51

回答

4

也许你的字符串“R e试图转换与默认系统格式不兼容。查看method signature and description可以发现,您可以覆盖它以满足您的需求,请参阅示例here

如果您发布了迄今为止的一段代码,或许您忽略了某些内容,这将有所帮助。


编辑

我已经错过了your're使用复杂的格式,包括多种分离的日期,这我不知道,在德尔福支持的事实。

我想在这种情况下,你可以将你的字符串分成几块然后encode them into a TDateTime。为了您的月份名称转换为月份数字,你可以通过LFormatSettings.ShortMonthNames遍历数组,像:

String longMonth:= copy(S, 0, 3); 
    for i := Low(LFormatSettings.ShortMonthNames) to High(LFormatSettings.ShortMonthNames) do 
     if SameText(longMonth, LFormatSettings.ShortMonthNames[i]) then begin 
      shortMonth:=FormatFloat('00', i); 
      Break; 
     end; 
+0

如果(ALCID <> gLCID)则 开始 gLCID:= ALCID; gFormatSettings:= TFormatSettings.Create(gLCID); 结束; 结果:= gFormatSettings; – YoungMaster 2012-07-12 12:52:37

+0

正如我所说的,尝试修改你的问题,添加一个正在产生错误的示例代码,就像我在上面的回答中给你作为例子的那个人一样。 – Morfic 2012-07-12 12:53:50

+0

最好的解决方案是使用jvDateUtil。StrToDate * – YoungMaster 2012-07-12 16:55:27

5

您的格式完全是非标准的(而且几乎不可理解的),所以不能被内置处理在日期/时间格式化器中。

你已经设计了你自己的格式,所以你需要编写自己的代码来进行转换。 这是大自然告诉你不要使用wacky date and time formats的方法!