【问题标题】:date from string crashes device字符串崩溃设备的日期
【发布时间】:2011-04-07 20:01:39
【问题描述】:

我正在阅读 RSS 并从那里获得一个元素: <pubDate>2011 年 4 月 7 日星期四 13:37:41 +0000</pubDate> 我使用以下代码将接收到的字符串转换为 NSDate

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  

        [dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; // Thu, 18 Jun 2010 04:48:09 -0700 


        NSDate *date = [dateFormatter dateFromString:[self.currentDate stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]];        

        [item setObject:date forKey:@"date"]; 

代码在模拟器中运行良好,但在设备上却崩溃了。原因是 NSDate 对象保持为零,当我将它添加到字典时,它会使应用程序崩溃。

我阅读了很多关于这个问题的信息,但没有一个解决方案对我有用。我的意思是他们中的很多人都这样做了,但是在模拟器中......

任何帮助表示赞赏, 卢卡 ...

【问题讨论】:

  • 可以将原始日期字符串打印到控制台,这样我们可以检查格式是否正确。它 nil 的原因是因为日期格式化程序无法解析日期字符串。您应该在将日期添加到数组之前检查它是否为 nil,以防万一。

标签: iphone nsdate


【解决方案1】:

检查两件事以消除模拟器和ios设备之间的差异。

  1. iOS 设备区分大小写。所以你必须检查你的字符串是否有问题。

  2. 区域设置可能因您的模拟器和 iOS 不同而不同。以防止这种情况定义日期格式化程序的正确语言环境。

    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

    [dateFormatter setLocale:usLocale];

【讨论】:

  • 这是日期格式化程序设置本地的问题。你能给我解释一下 setLocale 的作用吗?是否强制设备使用美国本地设置而不是像我这样的西班牙设置?另外,我可以期待其他设备上的问题吗?非常感谢。 L
  • setLocale 只是做本地化。当您设置语言环境 en_US 时,日期格式化程序会尝试将“Thu”而不是“Jue”解析为星期四。
【解决方案2】:

通过

测试格式化程序的行为
[dateFormatter dateFromString:[NSDate date]]

如果不是格式化程序的格式,则意味着您的 nsstring 是罪魁祸首。

您可以记录您尝试转换的字符串吗?应该是这个问题

NSLog(@"string is: %@", self.currentDate);

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多