为啥我从“2010-12-31 15:00:00 +000”得到“2010-01-01 00:00:00 +900”?

Posted

技术标签:

【中文标题】为啥我从“2010-12-31 15:00:00 +000”得到“2010-01-01 00:00:00 +900”?【英文标题】:Why do I get "2010-01-01 00:00:00 +900" from "2010-12-31 15:00:00 +000"?为什么我从“2010-12-31 15:00:00 +000”得到“2010-01-01 00:00:00 +900”? 【发布时间】:2010-12-31 12:50:32 【问题描述】:

我有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;

【问题讨论】:

【参考方案1】:

我得到了我需要的如下:

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

【讨论】:

那么问题是什么? 大写的“Y”给出了该日期的开始的年份。小写的“y”给出了日期本身的年份。见Unicode Date Format Patterns。【参考方案2】:

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

编辑:哦,你成功了,太好了。迟了几秒。 :) 干杯!

【讨论】:

【参考方案3】:

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(比如说东京)吗?

【讨论】:

怎么样?按时区划分,2011 年 1 月 1 日可能会与 2010 年 12 月 31 日混淆,但这似乎相差了一年。 唐:你是对的。我是盲人:) 尽管 OP 在问题的标题上打错字,但可能性很小。 是的,我在东京。我看到就像你说的那样,2011-01-01 00:00:00 +900 与 2010-12-31 15:00:00 +000 相同,但我得到了 2010-01-01 15:00:00 +000 ,这是我的问题。

以上是关于为啥我从“2010-12-31 15:00:00 +000”得到“2010-01-01 00:00:00 +900”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我从这个查询中得到无效号码?

为啥我从这个请求 iOS JSON 得到空响应

为啥我从 API 调用中得到太多响应

为啥我从 scipy.optimize.fmin 得到不正确的结果?

为啥我从 tensorflow 网站收到此代码的语法错误? [关闭]

为啥我从 html doc 得到函数未定义错误?