解决时间相差8小时 && 与当前时间相差n个月、n天的代码

按照一贯的做法 代码如下

- (NSString *)getNowDate{

    NSDate *date = [NSDate date];

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: date];

    NSDate *nowDate = [date  dateByAddingTimeInterval: interval];

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

    [dateformatter setDateFormat:@"YYYY-MM-dd"];

    NSString *  locationString =[dateformatter  stringFromDate:nowDate];

    return locationString;

}

我以为这样就行了  但是当北京(亚洲-上海)时间 过了16点  就显示另一天的了

这样肯定是不行的   因为很多时候我们需要的是查询当天的数据  在网上找了下  发现少了一句代码

解决办法

- (NSString *)getNowDate{

    NSDate *date = [NSDate date];

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: date];

    NSDate *nowDate = [date  dateByAddingTimeInterval: interval];


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

    [dateformatter setDateFormat:@"YYYY-MM-dd"];

    [dateformatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

    NSString *  locationString =[dateformatter  stringFromDate:nowDate];

    return locationString;

}

做项目时  经常发现需要查询一个月、三个月 或者半年的数据  与时间打交道  绕来绕去的确实烦   如下代码  复制粘贴  好用

//比当前日期少三个月

- (NSDate *)getDate{

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *now = [NSDate date];  //当前时间



    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];

    NSDate *startDate = [calendar dateFromComponents:components];  //今天0点时间

    NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitMonth value:-3 toDate:startDate options:0];


    //    NSDate *date = [NSDate date];

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: endDate];

    NSDate *lastDate = [endDate  dateByAddingTimeInterval: interval];//三个月之前的日期


    return lastDate;

}

当然 根据这个方法  我们不难得出另外的  例如 比当前日期少3天  少一个星期   代码如下

//比当前日期少一个星期

- (NSDate *)getToSevenDay{

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDate *now = [NSDate date]; //当前时间 NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];

 NSDate *startDate = [calendar dateFromComponents:components];

//今天0点时间

NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:-7 toDate:startDate options:0];

// NSDate *date = [NSDate date];

NSTimeZone *zone = [NSTimeZone systemTimeZone];

NSInteger interval = [zone secondsFromGMTForDate: endDate];

NSDate *lastDate = [endDate dateByAddingTimeInterval: interval];

//七天之前的日期

return lastDate;

}

另外选择日期时  我建议用pickview  这个看起来不那么别扭  之前我也是在界面上弹出一个view  然后选择时间  太难看了

使用选择器 显示的样式截图如下  有关用法 我之前的blog有写


解决时间相差8小时 && 与当前时间相差n个月、n天的代码_第1张图片

//离当天有几天 例如今天2017-05-12 传入1 那么返回的是2017-05-11

- (NSString *)getTimeWithIntDay:(NSInteger)day{


    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *now = [NSDate date];

    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];

    NSDate *startDate = [calendar dateFromComponents:components];

    NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:-day toDate:startDate options:0];

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

    [dateFormatter setDateFormat:@"YYYY-MM-dd"];


    return [dateFormatter stringFromDate:endDate];


}


当然如果要获取当前时间  那么上述方法传入0就OK了   方便实用  没时差

你可能感兴趣的:(解决时间相差8小时 && 与当前时间相差n个月、n天的代码)