0

我用一个函数创建了简单的 ObjectiveC 动态库

NSString* DateTimeToString(NSDate* dt)
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"YYYY'-'MM'-'dd'T'HH':'mm':'ss"];
    NSString *stringDate = [formatter stringFromDate:dt];
    [formatter release];

    return stringDate;    
}

如您所见,此函数将以 2011-04-14T09:29:53 格式返回日期。

我已经将此库集成到我的 Delphi XE3 测试项目中

function _DateTimeToString(date: Pointer): Pointer; cdecl;  external
         'libTimeLib.dylib' name '_DateTimeToString';

function DateTimeToString(dt: TDateTime): string;
var
    date: NSDate;
    res: NSString;
begin
    date := TNSDate.Wrap(TNSDate.OCClass.date);

    res := TNSString.Wrap(_DateTimeToString((date as ILocalObject).GetObjectID));
    Result := string(res.UTF8String);
end;

当我从我的 Delphi 项目中调用它时,它返回05/15/13,而在 XCode 项目中它返回正确的2013-05-15T16:42:42日期。

有人可以解释为什么 NSDateFormatter 在 Delphi 应用程序使用的库中不起作用吗?

更新

我在 Delphi 中创建了这个函数

function DateTimeToStringDelphi(): string;
var
    formatter: NSDateFormatter;
    stringDate: NSString;
begin
    formatter := TNSDateFormatter.Create();
    formatter.setDateFormat(NSSTR('YYYY-MM-dd HH:mm:ss'));

    stringDate := formatter.stringFromDate( TNSDate.Wrap(TNSDate.OCClass.date) );
    formatter.release;

    result := string(stringDate.UTF8String);
end;

它还以 05/15/13 格式返回日期,所以这不是库问题。

4

1 回答 1

0

问题出在默认 NSDateFormatterBehaviour 并且已使用此调用修复

TNSDateFormatter.OCClass.setDefaultFormatterBehavior(NSDateFormatterBehavior10_4);
于 2013-05-17T07:11:16.807 回答