【问题标题】:NSDate from NSString gives null result来自 NSString 的 NSDate 给出空结果
【发布时间】:2011-12-06 07:54:47
【问题描述】:

我正在使用以下代码生成NSDate -> NSString

+(NSString *)getCurrentTime
{
    NSDate *now = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy hh:MM:SS a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSString* str =[dateFormatter stringFromDate:now];
    [dateFormatter release];
    NSLog(@"%@",str);
    return str;
}

上面的代码一切正常。我正在使用上面的代码将字符串存储在数据库中。现在在检索该字符串时给了我NULL。以下是我以特定格式检索日期的代码

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:MM:SS a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSDate *dt =[dateFormatter dateFromString:crdInfo.swipeTime];
    NSLog(@"Date : %@",dt);
    [dateFormatter release];

我应该如何以特定格式检索或存储?我的 crdInfo.swipeTime 正在适当地检索字符串...

【问题讨论】:

  • @AnkitSrivastava:但不工作......
  • 查看 crdInfo.swipeTime 的值
  • 我已经检查过了...这正在返回我的价值...
  • 我认为问题出在您的“hh:MM:SS a”中。我个人使用“yyyy/MM/dd HH:mm:ss ZZZZ”。 IIrc "MM" 代表月份而不是分钟。对于 24 小时格式,我也会使用“HH”而不是“hh”。秒是“ss”而不是“SS”。不知道“a”是什么意思,但我想没关系。希望对你有帮助
  • 存储和检索时的日期格式应相同

标签: iphone objective-c ios nsdate nsdateformatter


【解决方案1】:

首先,为什么不只存储 NSDate 对象或纪元时间戳?这将在未来为您提供更大的灵活性。

现在对于您的问题,我怀疑这是由于您对 NSDateFormatter 的配置,您将其保存为一种格式并尝试将其转换为使用不同格式的日期。使格式相同,然后重试。如果您想以不同于存储的方式显示它,您可能需要使用存储的格式将其转换为 NSDate,然后再次使用另一个日期格式化程序以您希望将其作为字符串的格式获取它。

【讨论】:

    【解决方案2】:

    正如 Narayana 建议的那样,您需要以与您存储的格式相同的格式检索日期。检索如下: -

        NSDateFormatter *reDateFormatter = [[NSDateFormatter alloc] init];
        [reDateFormatter setDateFormat:@"dd-MM-yyyy hh:MM:SS a"];
        [reDateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
        NSDate *dt = [reDateFormatter dateFromString:str];
        NSLog(@"The Date : %@",dt);
    
        [reDateFormatter setDateFormat:@"hh:MM:SS a"];
        NSString *currentTime = [reDateFormatter stringFromDate:dt];
        NSLog(@"%@",currentTime);
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      尝试将其格式化为dd-MM-yyyy hh:mm:ss a。

      你写了dd-MM-yyyy hh:MM:SS a where MM in hh:MM:SS 给出了这种格式无法识别的月份,并且没有必要写几秒钟的大写 SS

      希望你能理解。

      【讨论】:

      • 我认为他只想从日期中检索时间。
      • @Parth Bhatt:我做过一些演示应用程序,我尝试使用大小写的所有组合......但从我的测试结果中我发现它只与 HHhh 仅当您未提及 a 部分即 AM/PM 部分时。所以我在那个演示应用程序中解决了这个问题。但我也尝试过这种方式,但它不起作用......无论如何......谢谢并建议你是否有不同的想法......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多