如何转换为TDateTime这样格式化的字符串:15h44m28s?

时间:2014-01-22 18:24:30

标签: delphi type-conversion delphi-xe2

我的文件名以日期时间编码,格式为:yyyy-mm-dd_HHhMMhSSs。
真实的例子: 2013-08-05_15h44m28s (在时间部分,它只能有小时部分)

我必须将其转换回实际的日期时间。日期部分非常简单,已经解决了,但是对于我在delphi中找不到的时间部分安装了开箱即用的方法。

所以我得到了一个SScanf实现来解决这个问题,但问题仍然存在:我是否忽略了某些事情,或者它确实是这样做的,而不必自己编写代码?

注意:虽然我标记了我的delphi版本,但更新版本中存在的函数也很有趣 顺便说一句,有人知道时间部分的格式是否有名字?

1 个答案:

答案 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;