【问题标题】: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;
}

【问题讨论】:

    标签: ios nsdate nsdateformatter nsdatecomponents


    【解决方案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 ,这是我的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2020-07-17
      • 2012-03-14
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多