FormatDateTime的反函数

Sal*_*dor 19 delphi

我要寻找一个函数来扭转任何字符串(YYYYMDD,YY/MM/DD,YYMMDD由函数创建,...)的FormatDateTime为datetime.

我有一个由字符串日期格式YYYYMMDD创建FormatDateTime

mydatestr:=FormatDateTime('YYYYMMDD',Mydate); 
Run Code Online (Sandbox Code Playgroud)

现在我怎么能DateTime再次将mydatestr转换成?

UPDATE

这些功能

function StrToDate(const S: string): TDateTime; overload;
function StrToDate(const S: string;
  const FormatSettings: TFormatSettings): TDateTime; overload;

function StrToDateTime(const S: string): TDateTime; overload;
function StrToDateTime(const S: string;
  const FormatSettings: TFormatSettings): TDateTime; overload;
Run Code Online (Sandbox Code Playgroud)

不支持传递具有要转换格式的字符串.

我看起来像这样

Mydatetime:=InvFormatDatetime('20091225','yyyymmdd');
Run Code Online (Sandbox Code Playgroud)

要么

Mydatetime:=InvFormatDatetime('20090108','yyyyddmm');
Run Code Online (Sandbox Code Playgroud)

too*_*too 10

现有的解决方案,RX包中的rxDateutil.pas单元中的StrToDateFmt函数非常简单,可以在这里下载:http://sourceforge.net/projects/rxlib/

编辑:

上面提到的函数和来自rxDateutil.pas的StrToDateFmt正在按照您的预期完成,使用指定的字符串掩码将字符串转换为日期时间,代码太大而无法包含,因为此单元还包含其他日期函数,其中一些需要将字符串转换为日期.

使用示例:

Result := StrToDateFmtDef('MM/DD/YYYY', '11/11/2011', Now);
Run Code Online (Sandbox Code Playgroud)

  • 此功能也已移植到JVCL.它位于"JvJCLUtils"单元中 (3认同)
  • 我仍然想知道为什么人们使用如此令人沮丧的格式来表达日期/时间:'11/11/2011' - 什么是11?月日?或日/月?是的,你知道面具,但它是特定的语言环境...为什么不使用确定性/严格标准,例如ISO8601? (2认同)

Ada*_*son 6

注意:不幸的是,正如Martien在此答案的评论中指出的那样,该解决方案不适用于日期不包含日期分隔符的情况。但是,我将把答案留给任何可能觉得有用的人。

我喜欢Tuncay的回答,但是有一些问题。我本来想发表评论,但我的信誉度不足。

因此,这是Tuncay答案的更正版本(修正了“ TFormatSetting”缺少一个“ s”并指定了格式设置日期分隔符):

function AnyStringToDate(fmt, dt: String) : TDateTime;
var
  fs : TFormatSettings;
Begin
  fs := TFormatSettings.Create;
  fs.DateSeparator := '-';
  fs.ShortDateFormat := fmt;

  result := StrToDateDef(dt, 0, fs);
End;
Run Code Online (Sandbox Code Playgroud)

与Tuncay的答案相同,AnyStringToDate可以按以下方式使用:

mydate := AnyStringToDate('YYYY-MM-DD', '2015-01-20');
Run Code Online (Sandbox Code Playgroud)


Tun*_*ğlu 5

无需使用任何外部库,您可以执行以下操作:

function AnyStringToDate(fmt, dt: String) : TDateTime;
var
  fs : TFormatSettings;
Begin
  fs := TFormatSettings.Create;
  fs.ShortDateFormat := fmt;

  result := StrToDateDef(dt, 0, fs);
End;
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

  mydate := AnyStringToDate('YYYY-MM-DD', '2015-01-20');
Run Code Online (Sandbox Code Playgroud)

我还没有编译,但是想法很简单。