格式化日期问题一直返回Nil

时间:2013-09-16 11:12:57

标签: iphone objective-c nsdate nsdateformatter

我有NSDate *da,当我打印时,我会收到以下字符串:2013-10-24 00:00:00 +0000

NSDateFormatter *form = [[NSDateFormatter alloc] init];
[form setDateFormat:@"yyyy-mm-dd"];
NSDate *myD = [form dateFromString: @"2013-10-24"];

现在我要做的是比较NSDate *daNSDate *myD。如果匹配,我需要打印NSLog

if ([da isEqualToDate:myD]) {    
    NSLog(@"ok");               
} else {
    NSLog(@"bad");
}

问题在于myD变为null。我该如何解决这个问题?

更新

格式化程序仍有问题;但是现在它不会返回NIL。

当我打印da时,我得到输出2013-10-24 13:00:00 +0000,当我打印myD时,我得到输出2013-10-23 18:30:00 +0000。为什么这没有正确的格式。我认为我的代码的格式化部分仍然存在一些错误。帮助

更新2

NSDate *da = [NSDate date]; ///// PRINTS 2013-09-16 11:52:40 +0000

    NSDateFormatter *form = [[NSDateFormatter alloc] init];
    [form setDateFormat:@"yyyy-MM-dd"];
    NSDate *myD = [form dateFromString: @"2013-09-16"]; ////// PRINTS 2013-09-16 00:00:00 +0000

5 个答案:

答案 0 :(得分:1)

您的格式字符串错误,因为'mm'代表分钟,而不是几个月。正确的格式将是

[form setDateFormat:@"yyyy-MM-dd"];

答案 1 :(得分:1)

月份应为大写:

[form setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter使用详细的here规范。

答案 2 :(得分:0)

您可以更改日期格式,例如

 [form setDateFormat:@"yyyy-MM-dd"];

你可以像这样比较..

 NSTimeInterval daInterval = [da timeIntervalSince1970];
 NSTimeInterval myDInterval = [myD timeIntervalSince1970];

 if(daInterval == myDInterval)
    NSLog(@"dates are same..");

答案 3 :(得分:0)

我认为你遇到的问题是你没有这样做:

[form setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

您可以在不同的时区创建时间,而不是在打印时将其格式化为您当地的时区。

答案 4 :(得分:0)

    NSString *str1=@"2013-10-24 00:00:00 +0000";
    NSDateFormatter *form = [[NSDateFormatter alloc] init];
    [form setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSDate *date1= [form dateFromString:str1];
    NSLog(@"%@",date1);


    NSString *str2=@"2013-10-24 00:00:00 +0000";
    NSDate *date2= [form dateFromString:str2];

   if ([date1 isEqualToDate:date2]) {
      NSLog(@"Same");
   }
   else
   {
      NSLog(@"Not Same");
  }

我希望它很有用..