2011-09-25 61 views
1

我有问题,NSDateFormetter 我将日期从选择器在一个视图中字符串错误日期从formater返回!为什么?

`NSDateFormatter *output = [[NSDateFormatter alloc] init]; 
[output setDateStyle:NSDateFormatterMediumStyle]; 
[output setDateStyle:NSDateFormatterShortStyle]; 
[output setDateFormat:@"yyyy-MM-dd hh:mm:ss"];  
NSString *StringToSend = [output stringFromDate:datePicker.date]; 

` 然后发送串到其他笔尖

,与该代码转换回

`NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[inputFormatter setDateStyle:NSDateFormatterShortStyle]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:StringFromOtherView]; 
NSLog(@"%@", formatterDate);` 

和这是回错日期 发送2011-09-26 01:02:49 geting 2011-09-25 22:02:49 +0000

有什么不对?

+2

你为什么要设置MediumStyle再短的风格?然后指定一个明确的日期格式。看起来像冗余部门的输出。 –

+0

“冗余部门”。爆笑! – Hahnemann

回答

0

将时区包含在日期格式字符串中。

+0

但看[这里](http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformater-locale-feature)。除了设置时区之外,您还应该设置区域设置。 –

5

因为:

  1. 当你NSLog()一个NSDate,它总是日志它GMT
  2. 你住在一个时区这是提前GMT三个小时。因此,上午1:02是格林威治标准时间下午22:02(前一天)。
+0

+1为好答案!我一天天成为你的粉丝。我仰望你,如果我有一天能像你一样有知识,那么我想我会取得巨大的成功:] –

0
+ (NSDate*) dateFromString:(NSString*)aStr 
{ 

    if (aStr.length == 10) { 
    aStr = [aStr stringByAppendingFormat:@" 00:00:00"]; 
} 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MM-dd-yyyy HH:mm:ss"]; 
    dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    NSLog(@"strdate %@", aStr); 
    NSDate *aDate = [dateFormatter dateFromString:aStr]; 
    NSLog(@"date = %@",aDate); 
    [dateFormatter release]; 
    return aDate; 

}

相关问题