【问题标题】:MacOs X dynamic library incorrect work in Delphi XE3 projectMacOs X 动态库在 Delphi XE3 项目中工作不正确
【发布时间】:2013-05-16 12:14:23
【问题描述】:

我用一个函数创建了简单的 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 格式返回日期,所以不是库问题。

【问题讨论】:

    标签: macos delphi nsdateformatter delphi-xe3 dylib


    【解决方案1】:

    问题在于默认的 NSDateFormatterBehaviour,并且已使用此调用修复

    TNSDateFormatter.OCClass.setDefaultFormatterBehavior(NSDateFormatterBehavior10_4);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多