我的文件名以日期时间编码,格式为:yyyy-mm-dd_HHhMMhSSs。
真实的例子: 2013-08-05_15h44m28s (在时间部分,它只能有小时部分)
我必须将其转换回实际的日期时间。日期部分非常简单,已经解决了,但是对于我在delphi中找不到的时间部分安装了开箱即用的方法。
所以我得到了一个SScanf
实现来解决这个问题,但问题仍然存在:我是否忽略了某些事情,或者它确实是这样做的,而不必自己编写代码?
注意:虽然我标记了我的delphi版本,但更新版本中存在的函数也很有趣 顺便说一句,有人知道时间部分的格式是否有名字?
答案 0 :(得分:3)
这是正则表达式的一个很好的用例。一旦你取消了日期,你可以使用这个正则表达式:
(\d+)h(\d+)m(\d+)s
实际上,您也可以通过这种方式解析整个字符串。您只需要这个功能:
function ToDateTime(const str: string): TDateTime;
var
Match: TMatch;
begin
Match := TRegEx.Match(str, '(\d+)-(\d+)-(\d+)_(\d+)h(\d+)m(\d+)s');
if Match.Groups.Count<>7 then
raise Exception.CreateFmt('Could not parse date/time: %s', [str]);
Result := EncodeDateTime(
StrToInt(Match.Groups[1].Value),
StrToInt(Match.Groups[2].Value),
StrToInt(Match.Groups[3].Value),
StrToInt(Match.Groups[4].Value),
StrToInt(Match.Groups[5].Value),
StrToInt(Match.Groups[6].Value),
0
);
end;