iOS 一周内的时间设置以及时区的转换

-(NSString*)format:(NSString*)string{

    //输入的时间格式

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

    [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ];

    [inputFormatter setDateFormat:@"yyyy-MM-dd"];

    NSDate*inputDate = [inputFormatter dateFromString:string];


    //输出的时间格式

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

    [outputFormatter setLocale:[NSLocale currentLocale]];

    [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];


    //NSDate-->NSString

    NSString*str= [outputFormatter stringFromDate:inputDate];

    //NSString-->NSDate

    NSDate*strDate = [outputFormatter dateFromString:str];


    //转换为当前时区,修正8小时的差时

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSIntegerinterval = [zone secondsFromGMTForDate: strDate];

    NSDate*endDate = [strDate  dateByAddingTimeInterval: interval];

    NSString*lastTime = [self compareDateWith:endDate];

    returnlastTime;

}


//时间的比较判断

-(NSString*)compareDateWith:(NSDate*)date{

    //一天内的时间

   NSTimeInterval secondsPerDay =24*60*60;

    //获取当前时间,并修正8小时的差时

    NSDate*date1 = [NSDatedate];

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: date1];

    NSDate*localeDate = [date1  dateByAddingTimeInterval: interval];

   //今天、昨天

   NSDate*today = localeDate;

    NSDate*yesterday = [today dateByAddingTimeInterval: -secondsPerDay];

    //今年、今天,昨天对应的NSString

    NSString*toYears = [[today description] substringToIndex:4];

    NSString*todayString = [[today description]substringToIndex:10];

    NSString*yesterdayString = [[yesterday description]substringToIndex:10];

   //输入的时间对应的日期和年限字符串

    NSString*dateString = [[date description]substringToIndex:10];

    NSString*dateYears = [[date description]substringToIndex:4];

    NSString*dateContent;//要返回的字符串内容

    if([dateYearsisEqualToString:toYears]) {//同一年 内时间格式:(19 March)

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

        [outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:CMSGetStringWithKeyFromTable(@"Language_LocaleIdentifier", @"Localizable")]];

        [outputFormatter setDateFormat:@"d MMMM"];

        NSString*time2 = [outputFormatter stringFromDate:date];;

        if([dateString isEqualToString:todayString]){//今天

            dateContent = [NSString stringWithFormat:@"%@",CMSGetStringWithKeyFromTable(@"Today",@"Localizable") ];

            returndateContent;

        }elseif([dateString isEqualToString:yesterdayString]){//昨天

            dateContent = [NSString stringWithFormat:@"%@",CMSGetStringWithKeyFromTable(@"Yesterday",@"Localizable")];

            returndateContent;

        }   else{

            if ([self compareDateFromeWorkTimeToNow:date]) {  //一周之内除了今天昨天前天之外显示星期

                return[self weekdayStringFromDate:date];

            }else{//一周之外的显示日期

                return time2;

            }

        }

    }else{//不是同一年

        NSDateFormatter*outputFormatter= [[NSDateFormatteralloc]init];

        [outputFormatter setLocale:[NSLocale currentLocale]];

        [outputFormatter setDateFormat:@"d MMMM yyyy"];

        NSString*time3 = [outputFormatter stringFromDate:date];

        returntime3;

    }

}

//传入时间字符与今天比较是否在一周之内

- (BOOL)compareDateFromeWorkTimeToNow:(NSDate*)timeStr{

     //获得当前时间

     NSDate*currentDate = [NSDate date];

     NSCalendar*calendar = [NSCalendar currentCalendar];

     NSDateComponents*comps=[calendar components:NSCalendarUnitDayfromDate:timeStrtoDate:currentDateoptions:0];

    if(comps.day<7) {

        returnYES;

    }else{

        returnNO;

    }

}


//传入时间返回星期几

- (NSString*)weekdayStringFromDate:(NSDate*)inputDate{

    NSArray*weekdays = [NSArrayarrayWithObjects: [NSNullnull],

                         CMSGetStringWithKeyFromTable(@"Sunday",@"Localizable"),

                         CMSGetStringWithKeyFromTable(@"Monday",@"Localizable"),

                         CMSGetStringWithKeyFromTable(@"Tuesday",@"Localizable"),

                         CMSGetStringWithKeyFromTable(@"Wednesday",@"Localizable"),

                         CMSGetStringWithKeyFromTable(@"Thursday",@"Localizable"),

                         CMSGetStringWithKeyFromTable(@"Friday",@"Localizable"),

                         CMSGetStringWithKeyFromTable(@"Saturday",@"Localizable"),nil];

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSTimeZone*timeZone = [[NSTimeZone alloc]initWithName:@"Asia/Shanghai"];

    [calendar setTimeZone: timeZone];

    NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;

    NSDateComponents*theComponents = [calendar components:calendarUnitfromDate:inputDate];

    return[weekdays objectAtIndex:theComponents.weekday];

}



/*!

 * @breif 将带有时区的时间转换为某个固定时区时间

 * @param localDateString 需要转换的时间

 * @param formatStr 转换后的的时间格式

 */

+(NSString*)getUTCFormatDate:(NSString*)localDateString formatStr:(NSString*)formatStr{

    //根据已有的dateFormatter转换需要的NSDate

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

    [localdateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

    NSDate*localDate = [localdateFormatter dateFromString:localDateString];


    //转换为东八区的时间

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

    NSTimeZone *timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"];

    [dateFormatter setTimeZone:timeZone];

    [dateFormatter setDateFormat:formatStr];

    NSString*dateString = [dateFormatter stringFromDate:localDate];

    returndateString;

}

你可能感兴趣的:(iOS 一周内的时间设置以及时区的转换)