NSDateFormatter 在 ios 中显示错误的日期?

NSDateFormatter showing wrong date in ios?

我有日期格式为“2016-03-16”的 NSString,我添加了以下代码以正确的 NSDate 格式获得相同的日期,但它返回“2016-03-15 18:30:00 +0000” .我如何在 NSDate 中获得相同的“2016-03-16”?

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

    dateFormatter.dateFormat = @"yyyy-MM-dd";
    NSString *datePart = [dateFormatter stringFromDate:dateFromString];//2016-03-16

    NSDate *dateValue = [dateFormatter dateFromString:datePart];
    NSLog(@"%@----",dateValue); //" 2016-03-15 18:30:00 +0000 

默认情况下,日期格式化程序使用您当地的时区。 -[NSDate description] 方法(%@ 调用的方法)使用 UTC。这就是字符串不同的原因。

您尝试在控制台中打印 NSDate 实例。这就是您的代码在控制台中打印默认格式值的原因。

您需要借助此方法从 NSDate 实例获取字符串值 [your_dateformater stringFromDate:dateInstance]

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd";
NSString *datePart = @"2016-03-16";
NSDate *dateValue = [dateFormatter dateFromString:datePart];
NSLog(@"string convert into Date is - %@",[dateFormatter stringFromDate:dateValue]);

您当地的时区大概是 UTC+5:30。您指定的是日期而不是时间,因此时间暗示为午夜。在您当地时区的 16 号午夜是 UTC 时间前一天(15 号)的 18:30,这就是为什么您会得到“2016-03-15 18:30:00 +0000”[=15] =]

当您使用 NSLog(@"%@----",dateValue) 记录日期时,您实际上是在调用 [dateValue description],它使用 UTC 显示日期。

您可以使用 NSLog(@"%@----",[dateValue descriptionWithCalendarFormat:nil timeZone:[NSTimeZone localTimeZone] locale:nil]),您将看到您当前时区的日期。

请注意,尽管 description 和相关方法(例如 descriptionWithCalendarFormat 方法)仅用于调试,但您应该使用 NSDateFormatter 将日期转换为字符串。 iOS_Binod 的答案显示了一种方法。