【问题标题】:Convert php date to objective-c将php日期转换为objective-c
【发布时间】:2023-03-10 21:50:01
【问题描述】:

我正在尝试查找自游戏中最后一次移动以来的时间间隔。通常,在objective-c中,我这样做并且效果很好:

    NSDate *now = [NSDate date]; 
    NSDate *before = [NSDate dateWithTimeInterval:-60 sinceDate:now]; 

    NSTimeInterval interval = [now timeIntervalSinceDate: before]; 

我将 lastTurn 日期存储在 mysql 数据库中:

timestamp   -   ON UPDATE CURRENT_TIMESTAMP

当我尝试在objective-c中获取日期时,它似乎有效:

    NSDate *lastTurn = match.lastTurn; 
    NSLog(@"lastTurn: %@", lastTurn);

    Output: lastTurn: 2012-03-21 09:40:32

...但是,当我尝试执行时间间隔时,我得到 -[__NSCFString timeIntervalSinceReferenceDate]: unrecognized selector sent to instance 错误。

    NSDate *lastTurn = match.lastTurn; 
    NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate: lastTurn]; 

任何建议都会很棒。谢谢

编辑

我使用 ASIHTTPRequest 从数据库中获取信息到 iphone。

Match 类只是一个保存变量的简单类:

@property (nonatomic, strong) NSDate *lastTurn; 
etc...

...我通过这样做得到变量:

    [request setCompletionBlock:^
    {

     for (NSDictionary *dict in responseDict)
     {                
             Match *match = [[Match alloc] init];  
             match.lastTurn = [dict objectForKey:@"lastTurn"]; 

【问题讨论】:

  • 能否请您提一下,源日期(Php 日期)格式?
  • 你能发布你的Match对象的接口,以及你从sql查询结果构建你的匹配对象的代码吗?
  • 感谢您的回复。我用更多信息编辑我的问题:)

标签: php mysql objective-c xcode cocoa-touch


【解决方案1】:

(免责声明:我对objective-c一无所知,所以这可能是完全垃圾,只阅读文档会导致危险的肤浅知识;-))

我的赌注是

NSDate *lastTurn = match.lastTurn;
NSLog(@"className of lastTurn is %@", [lastTurn className]);

打印className of lastTurn is __NSCFString,您必须通过例如将该字符串转换为 NSDate 的实例。 dateWithString 在像 NSDate 实例一样使用它之前。


NSDate Class Reference 说:

NSDate 的唯一原始方法timeIntervalSinceReferenceDate 为 NSDate 接口中的所有其他方法提供了基础。
这意味着在 [NSDate date]lastTurn 上都调用了 timeIntervalSinceReferenceDate
错误消息 -[__NSCFString timeIntervalSinceReferenceDate] 指出(如果我没记错的话)选择器 timeIntervalSinceReferenceDate 已发送到 __NSCFString 的实例,即 NSString 的“风味”,而不是 NSDate 的实例。
因为[NSDate date]很可能是 NSDate 的一个实例,所以只剩下lastTurn

我的猜测是responseDict 中的所有条目都是字符串,简单的NSDate *lastTurn = match.lastTurn; 不会进行任何转换,甚至(鸭子)类型检查也不会。

【讨论】:

  • 太棒了。你是对的。它是一个字符串......当将字符串转换为 nsdate 时,它​​可以工作(dateFromString)。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2016-10-03
  • 1970-01-01
  • 2011-11-06
  • 2018-08-10
  • 2011-10-14
相关资源
最近更新 更多