为什么从“2010-12-31 15:00:00 +000”获得“2010-01-01 00:00:00 +900”?

时间:2010-12-31 12:50:33

标签: ios nsdate nsdateformatter nsdatecomponents

我有NSDate,如果我使用NSLog(@"%@", date.description);

,它将显示如下
  

2010-12-31 15:00:00 +0000

它将显示为使用NSLog(@"%@", [date descriptionWithLocale:[[NSLocale currentLocale] localeIdentifier]]);

  

2011年1月1日星期六12:00:00 AM   日本标准时间

但如果我使用NSLog(@"%@", [date formattedDateString]);

,它将显示如下
  

2010-01-01 00:00:00 +0900

我哪里弄错了?

- (NSString *)formattedDateString {
    return [self formattedStringUsingFormat:@"YYYY-MM-dd HH:mm:ss ZZZ"];
}

- (NSString *)formattedStringUsingFormat:(NSString *)dateFormat {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:dateFormat];
    NSString *ret = [formatter stringFromDate:self];
    [formatter release];
    return ret;
}

3 个答案:

答案 0 :(得分:3)

我得到了我需要的东西,如下所示:

  

- (NSString *)formattedDateString {
  return [self formattedStringUsingFormat:@“yyyy-MM-dd HH:mm:ss ZZZ”];
  }

答案 1 :(得分:1)

你有一个NSDate的子类,对吧?我唯一的猜测是你在覆盖代码中的其他地方犯了一些错误,也许在设置日期的时间组件时(可以这么说),以便描述字符串或其源数据没有正确更新。

编辑:哦,你工作得很好,很棒。几秒钟太晚了。 :)干杯!

答案 2 :(得分:0)

2010-01-01 00:00:00 +9002010-12-31 15:00:00 +000都指向同一时间。

修改
2011-01-01 00:00:00 +9002010-12-31 15:00:00 +000都指向同一时间。

你碰巧住在GMT + 9(让我们说东京)吗?