【问题标题】:Wrong time from NSDateFormatterNSDateFormatter 的时间错误
【发布时间】:2011-03-29 00:00:44
【问题描述】:

我有一个字符串,我想从中解析时间:

NSString *longdate = @"Mar 27, 2011 8:38:38 PM";

我想解析这个日期并只输出带有小时+分钟+上午/下午的时间部分:

// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];
NSDate *date = [inFormat dateFromString:longdate];
[inFormat release];

// Now convert from date back to a string
NSDateFormatter *outFormat = [[NSDateFormatter alloc] init];
[outFormat setDateFormat:@"HH:mm aaa"];
NSString *final = [outFormat stringFromDate:date];
[outFormat release];

NSLog(@"original: %@ | final %@", longdate, final);

问题是最后的时间是错误的。我预计时间是晚上 8:38,但实际上是下午 12:38。

我只想按照我说的那样度过一个小时,而不是打扰任何时区或地区。我在这里做错了什么?谢谢。

【问题讨论】:

    标签: iphone objective-c parsing date nsdateformatter


    【解决方案1】:

    发现问题。与时区无关,与为日期格式化程序使用错误的格式代码有关。

    [inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];
    

    应该是:

    [inFormat setDateFormat:@"MMM dd, yyyy h:mm:ss aaa"];
    

    同样,outFormat 的日期格式应该是:

    [outFormat setDateFormat:@"h:mm aaa"];
    

    调整后一切正常,即使没有任何 TimeZone 调整。

    【讨论】:

      【解决方案2】:

      正如戴夫所说,检查您的时区。您也可以告诉日期格式化程序使用您当前的时区:

      [outFormat setTimeZone:[NSTimeZone localTimeZone]];
      

      【讨论】:

        【解决方案3】:

        你的时区搞砸了。 IIRC,NSDateFormatter(默认情况下)将解析 UTC 时区(+000)中的内容,但日期是您当前时区中的NSLogged。或者类似的东西。

        无论如何,请检查您的时区。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-19
          • 2015-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-02
          相关资源
          最近更新 更多