将时间戳转换为NSDate无效

时间:2013-07-24 10:56:40

标签: nsdate nsdateformatter

我在stackoverflow上遇到了很多链接,并试图实现代码以此格式 2013-07-20T12:23:54.411 + 05:30 将时间戳转换为此格式的NSDate < / p>

2013年7月20日(星期二)12:23:54或1分钟前,2天前格式化。

我已经实现了以下代码。 toDate为零,即date1给出零值。看起来像Xcode正在为这个问题讽刺

  

我的意思是,你觉得这个操作应该是什么意思   没有日期?目前已经避免了例外。一些   然后,这些错误将通过此投诉进行报告   进一步的违规行为只会默默地做任何随意的事情   结果来自零。

谁能告诉我哪里出错了?

     NSDateFormatter *dateForm = [[NSDateFormatter alloc] init];
    [dateForm setDateFormat:@"yyyy-mm-ddTHH:mm:ssssZ"];
    [dateForm setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    [dateForm setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSDate *date1 = [dateForm dateFromString:string];
    NSDate *date2 = [NSDate date];
    unsigned int unitFlags = NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;

    // gets the difference between the current date and also the date and time in the timestamp of the data
    NSDateComponents *diffComps = [cal components:unitFlags fromDate:date2 toDate:date1 options:0];

    int year = ABS([diffComps year]);
    int month = ABS([diffComps month]);
    int day = ABS([diffComps day]);
    int hour = ABS([diffComps hour]);
    int minute = ABS([diffComps minute]);
    int seconds = ABS([diffComps second]);
    NSString *displayTime;

    if (year == 0) {

        if (month == 0) {

            if (day == 0) {

                if (hour == 0){

                    if (minute == 0) {

                        displayTime = [NSString stringWithFormat:@"about %d secs ago",seconds];
                    }
                    else {

                        displayTime = [NSString stringWithFormat:@"about %d mins ago",minute];
                    }
                }
                else {

                    displayTime = [NSString stringWithFormat:@"about %d hours ago",hour];
                }
            }
            else {
                displayTime = [NSString stringWithFormat:@"about %d days ago",day];
            }
        }
        else {

            displayTime = [NSString stringWithFormat:@"about %d months ago",month];
        }
    }
    else {

        displayTime = [NSString stringWithFormat:@"about %d years ago",year];
    }

编辑:这对我在appdelegate中创建的字符串工作正常。但不是我在单例类中创建的字符串。

1 个答案:

答案 0 :(得分:2)

您没有使用正确的时间格式;我建议这样做:

yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ