如何在Delphi中实现MBox日期格式到TDateTime格式的便捷转换?
解析MBox日期字符串为可识别格式(Delphi实现)
在Delphi的标准库中,暂时没有现成的函数可以直接解析MBox文件里这种带星期、时区的日期格式(比如Mon, 03 Jun 2019 15:32:25 +0200)。不过我们可以自己写一个转换函数,把它处理成能被StrToDateTime识别的格式,甚至是Excel等工具兼容的格式。
自定义转换实现
下面是一个实用的转换函数,核心思路是先剔除不需要的星期和时区信息,再把英文月份缩写替换成数字格式:
// 定义月份缩写与数字格式的映射 const months : array[1..12,1..2] of string = (('-01-',' Jan '), ('-02-',' Feb '), ('-03-',' Mar '), ('-04-',' Apr '), ('-05-',' May '), ('-06-',' Jun '), ('-07-',' Jul '), ('-08-',' Aug '), ('-09-',' Sep '), ('-10-',' Oct '), ('-11-',' Nov '), ('-12-',' Dec ')); function ChangeDateFormat(input: String): String; var i: Integer; begin // 剔除开头的星期部分(比如"Mon, ") Delete(input, 1, Pos(',', input) + 1); // 剔除末尾的时区部分(比如" +0200") Delete(input, Pos('+', input) - 1, Length(input)); // 替换所有月份缩写为数字格式 for i := 1 to 12 do input := StringReplace(input, months[i,2], months[i,1], [rfReplaceAll, rfIgnoreCase]); Result := Trim(input); end;
使用示例
对于MBox中的日期字符串'Date: Mon, 03 Jun 2019 15:32:25 +0200',调用函数后:
WriteLn(ChangeDateFormat('Date: Mon, 03 Jun 2019 15:32:25 +0200'));
会返回03-06-2019 15:32:25,这个格式不仅可以直接用Delphi的StrToDateTime转换为TDateTime类型,还能被Excel识别并支持排序等操作。
内容的提问来源于stack exchange,提问作者kwadratens
相关产品推荐
相关产品推荐

