【问题标题】:NSString to NSDate keeps getting nullNSString 到 NSDate 不断变空
【发布时间】:2012-01-17 10:13:30
【问题描述】:

我知道这被问了很多次,但我总是在我的 NSDate 中得到空值。我有一个像“2012 年 1 月 16 日 21:44:56”这样的字符串,我想将其转换为“2012 年 1 月 16 日 09:44:56 PM”。我想在转换后的日期中添加一个 PM,并将 24 小时时间格式转换为 12 小时时间格式。这是我的代码。

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMMM dd, YYYY HH:ii:ss a"];

    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];

【问题讨论】:

  • 您不需要分配/初始化NSDate,因为当您向它分配一个从方法dateFromString: 返回的新NSDate 时,这会泄漏。就做NSDate *dateFromString = [dateFormatter dateFromString:dateString];

标签: iphone objective-c ios nsstring nsdate


【解决方案1】:

正如 Ali3n 正确指出的那样,您应该首先将dateString 的格式设置为格式化程序以获得有效的日期对象。接下来,您应该将格式化程序的格式设置为所需的格式并继续。执行以下操作:

NSString *dateString = @"January 16, 2012 21:44:56";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss"];

NSDate *dateFromString;
dateFromString = [dateFormatter dateFromString:dateString];

[dateFormatter setDateFormat:@"MMMM dd, YYYY HH:mm:ss a"];
NSString *stringFromDate  = [dateFormatter stringFromDate:dateFromString];

【讨论】:

    【解决方案2】:

    @"MMMM dd, YYYY HH:ii:ss a" 此格式应与 ypu 传递给日期格式化程序的日期匹配..

    【讨论】:

      【解决方案3】:

      您的格式字符串中有一个错误,您还需要告诉格式化程序您的日期字符串出现的区域设置。

      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
      [dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss a"];
      
      NSDate *dateFromString = [dateFormatter dateFromString:dateString];
      [dateFormatter release], dateFormatter = nil;
      

      设置本地非常重要,因为您的输入中有日期名称。您需要告诉NSDateFormatter 是该名称的语言。在给出的示例中,它是英文的。我已经在未将语言设置为英语的设备上运行代码而不设置本地语言,它将无法解析日期。

      【讨论】:

        【解决方案4】:

        尝试转义格式字符串中的文字。

        [dateFormatter setDateFormat:@"MMMM dd',' YYYY HH:ii:ss a"];
        

        【讨论】:

          【解决方案5】:

          至于您的要求,您必须更改 dateFormatter。查看此link 了解更多信息。

          NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
          [dateFormatter setDateFormat:@"MMMM dd, YYYY hh:mm:ss a"];
          NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
          [dateFormatter release];
          NSLog(@"%@",dateString);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-03-10
            • 1970-01-01
            • 2011-02-06
            • 2014-05-19
            • 1970-01-01
            • 1970-01-01
            • 2011-06-08
            相关资源
            最近更新 更多