0

我有一个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
4

5 回答 5

1

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

[form setDateFormat:@"yyyy-MM-dd"];
于 2013-09-16T11:19:33.753 回答
1

月份应为大写:

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

NSDateFormatter使用此处详述的规格。

于 2013-09-16T11:19:51.783 回答
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");
  }

我希望它有用..

于 2013-09-16T11:58:01.697 回答
0

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

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

并且您在不同的时区创建时间,然后在打印时将其格式化为您的本地时区。

于 2013-09-16T11:30:46.940 回答
0

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

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

你可以像这样比较..

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

 if(daInterval == myDInterval)
    NSLog(@"dates are same..");
于 2013-09-16T11:18:15.713 回答