1. 程式人生 > >iOS ISO8601格式的時間日期字串轉換成NSDate

iOS ISO8601格式的時間日期字串轉換成NSDate

+ (NSDate *)dateFromISO8601String:(NSString *)string {

    if (!string) return nil;

    struct tm tm;

    time_t t;

    strptime([string cStringUsingEncoding:NSUTF8StringEncoding], "%Y-%m-%dT%H:%M:%S%z", &tm);

    tm.tm_isdst = -1;

    t = mktime(&tm);

//    return [NSDate dateWithTimeIntervalSince1970:t]; // 零時區

  return [NSDate dateWithTimeIntervalSince1970:t + [[NSTimeZone localTimeZone] secondsFromGMT]];//東八區

}

//根據獲取到的時間判斷時間間隔 如 “剛剛”,“一分鐘前”,“一小時前”等;

//獲取時間 是用上面的方法獲取的

+(NSString *)JudgmentTimeIntervalWithISOTime:(NSString *)timeStr{

    NSDate *theDate = [self dateFromISO8601String:timeStr];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateFormat:@"MM-dd HH:mm"];

    NSString * timeString = nil;

    NSTimeInterval cha =  0 - [theDate timeIntervalSinceDate:[NSDate date]];

    if (cha/3600 < 1) {

        timeString = [NSString stringWithFormat:@"%f", cha/60];

        timeString = [timeString substringToIndex:timeString.length-7];

        int num= [timeString intValue];

        if (num <= 1) {

            timeString = [NSString stringWithFormat:@"剛剛"];

        }else{

            timeString = [NSString stringWithFormat:@"%@分鐘前", timeString];

        }

    }

    if (cha/3600 > 1 && cha/86400 < 1) {

        timeString = [NSString stringWithFormat:@"%f", cha/3600];

        timeString = [timeString substringToIndex:timeString.length-7];

        timeString = [NSString stringWithFormat:@"%@小時前", timeString];

    }

    if (cha/86400 > 1)

    {

        timeString = [NSString stringWithFormat:@"%f", cha/86400];

        timeString = [timeString substringToIndex:timeString.length-7];

        int num = [timeString intValue];

        if (num < 2) {

            timeString = [NSString stringWithFormat:@"昨天"];

        }else{

            timeString =[dateFormatter stringFromDate:theDate];

        }

    }

    return timeString;

}