字符串中的NSDate显示一个月前的日期

时间:2014-02-07 09:51:48

标签: ios iphone xcode nsdate nsdateformatter

我从数据库中获取格式为 yyyy-MM-DD 的字符串的日期,然后将其转换为格式为 yyyy-MM-DD 的NSDate。并再次将其转换为字符串格式 dd-MM

但最后我以字符串格式得到日期,它显示在日期前一个月。

以下是我使用的代码:

   NSDateFormatter *format=[[NSDateFormatter alloc]init];
   NSDateFormatter *format2=[[NSDateFormatter alloc]init];

   NSString *date;
   [format setDateFormat:@"yyyy-MM-DD"];
   [format2 setDateFormat:@"DD-MMM"];

   dict=[[NSMutableDictionary alloc]init];

   for(int i=0;i<[viewHistoryData count];i++)
   {
       dict=[viewHistoryData objectAtIndex:i];


           date=[dict objectForKey:@"Date"];

       NSLog(@"My date with out format = %@",date);
       NSString *dateString =[format2 stringFromDate:[format dateFromString:date]];
       NSLog(@"My date is = %@",dateString);


       [tempArray addObject:dateString];  
   }

输出

2014-02-07 15:01:07.586 VirtualRunner-V3[3580:c07] My date with out format = 2014-02-07
2014-02-07 15:01:07.588 VirtualRunner-V3[3580:c07] My date is = 07-Jan

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

您使用错误的占位符表示某一天的日期。您使用的是一年中的日期,范围从1 ... 365.所以而不是

[format setDateFormat:@"yyyy-MM-DD"];

使用

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

请参阅this link for a complete overview

答案 1 :(得分:0)

格式DD代表一年中的某一天,而不是一个月中的某一天,因此请将格式化程序更改为:

 [format setDateFormat:@"yyyy-MM-dd"];
 [format2 setDateFormat:@"dd-MMM"];

答案 2 :(得分:0)

更正两种格式。

[format setDateFormat:@"yyyy-MM-dd"];
[format2 setDateFormat:@"dd-MMM"];

但我认为,问题与时区有关。请使用以下格式。

[format2 setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0:00"]];

See this link