gpt4 book ai didi

date - TryStrToDate 失败,格式为 mmm/yy

转载 作者:行者123 更新时间:2023-12-03 18:18:05 26 4
gpt4 key购买 nike

我正在尝试使用 TryStrToDate 函数将格式为 mmm/yy 的字符串转换为 TDateTime。然而它似乎总是失败。

我创建一个格式设置记录并设置日期分隔符和短日期格式。我设置长日期格式显示无论我设置短日期格式还是长日期格式都会出现问题。

如果我将示例更改为使用 dd/mm/yyyy 并传入 01/02/2017 那么它会成功,所以我认为问题可能出在格式上。我使用以下链接作为引用来创建格式字符串

http://www.delphibasics.co.uk/RTL.asp?Name=formatdatetime

我制作了一个演示控制台应用程序来展示我正在尝试做的事情的示例

uses
System.SysUtils;

function ValidateDate(ADate: string): boolean;
var
fs: TFormatSettings;
DateTime: TDateTime;
begin
fs := TFormatSettings.Create();
fs.DateSeparator := '/';
fs.ShortDateFormat := 'mmm/yy';
fs.LongDateFormat := 'mmm/yy';

result := true;
if not TryStrToDate(ADate, DateTime, fs) then
result := false;
end;

begin
try
if not ValidateDate('Oct/16') then
WriteLn('Failed to convert')
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

我将不胜感激关于为什么失败的任何想法

最佳答案

您的格式字符串无效。这些格式字符串必须对日、月和年进行编码。您省略了不允许的日期。

您提供的用于转换的字符串可以省略年份。在这种情况下,假定为当前年份。

如果您希望将这些字符串转换为月份和年份,则包括一个假日期,例如1,在您传递给 TryStrToDate 的字符串中。然后使用 DecodeDate 获取月份和年份的数值,忽略日期。

因此,使用'd/mmm/yy' 作为格式,并通过'1/' + ADate 作为要转换的字符串。

另请注意,它是用于从字符串转换为日期的短日期字符串格式,因此这是您唯一需要设置的格式。

最后,这是一种非常简单的格式,您可以很容易地直接解析它。

更新

正如您在评论中所观察到的那样,RTL 功能是通过调用 ScanDate 实现的,它仅支持数字月份格式。因此,遗憾的是,您尝试的整个方法注定要失败。即使您解决了我发现的问题。

我的建议是自己简单地解析字符串,因为它的格式非常简单。

关于date - TryStrToDate 失败,格式为 mmm/yy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41974096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com