格式返回47130101后进行 NSDate



代码是这样的:

NSDateFormatter *formatter;
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMdd"];
for (int i=0; i<10000; i++) {
    dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(aQueue, ^{
    NSString *dateKey = [formatter stringFromDate:[NSDate date]];

        NSLog(dateKey);

    });
}

日期密钥有时会47130101吗?正常值类似于20120608。但我有时会47130101。

您的代码完全有效,我尝试了几次检查,它是有效的。

试试这个:

NSLog(@"%@", dateKey);

你会看到它。可能您在其他部分感到困惑。

您绝对不希望同时在多个线程上使用相同的NSDateFormatter对象。

线程安全确实指示 NSDateFormatter 明确地不安全。

我建议,如果你无论如何都要在GCD中这样做,你要么使用多个NSDateFormatters(如果你真的需要做10,000个这样的工作,可能是一个池),或者如果你的主要关注点是"意外"在多个线程中使用它,则使用单线程访问。

如果您选择后者,我会为 NSDateFormatter 创建一个专用的串行调度队列,并使用它来控制访问,以便它一次只能在一个线程上运行,但否则,如果您不太可能发生冲突,则会快速执行。

  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"yyyyMMdd"];
  NSString *dateKey = [formatter stringFromDate:[NSDate date]];

最新更新