构建 NSDate 时的问题

issue while constructing NSDate

我从这个字符串中得到 NSDate 但每次我从 Selected Month

中得到 Previous Month

我找不到错误:

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

  [dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];

  [dateFormatter setDateFormat:@"dd/MMM/yyyy"];

  NSDate *date = [dateFormatter dateFromString:strDate];

  NSLog(@"------Date----%@",date);

我试过很多 Datestrings 一些与日志是:

  strDate =---- 01/Jan/2016
  ------Date----2015-12-31 18:30:00 +0000

  strDate =----01/Dec/2015
  ------Date----2015-11-30 18:30:00 +0000

正如维京人所说,您所看到的是您显示结果日期的方式的产物。当你在 NSLog 中记录一个 NSDate 对象时,它总是以 UTC 显示。如果您的日期没有时间部分,则假定为午夜。如果您的时区在 UTC 之后,您所在时区的午夜将显示为前一天。

我建议您创建一个显示日期格式器来显示结果日期,并使用它:

- (NSString *) displayStringForDate: (NSDate *) date
{
   static NSDateFormatter *dateFormatter;
   if (dateFormatter == nil)
   {
     //This date formatter will default to the current time zone, like you want.
     dateFormatter = [[NSDateFormatter alloc]init];
     //Adjust the date format as desired
   {
   return [dateFormatter stringFromDate: date];
}

然后在您的测试代码中使用该方法:

NSLog(@"------Date----%@", [self displayStringForDate: date]);