您的位置:首页 > 移动开发 > IOS开发

关于NSDate的比较方便的方法收集以后还会继续更新

2016-08-19 17:35 267 查看
/**

 *  获得当前系统时间

 *

 *  默认为yyyy-MM-dd HH:mm:ss格式

 */

+ (NSDate *)getCurrentSystemDate {

    NSDate *senddate = [NSDate date];

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

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

    NSString *locationString=[dateformatter stringFromDate:senddate];

    return [dateformatter dateFromString:locationString];

}

/**

 *  获得某个时间上加day天

 */

- (NSDate *)getDateByAddDay:(NSInteger)day {

    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];

    dayComponent.day = day;

    NSCalendar *theCalendar = [NSCalendar currentCalendar];

    return [theCalendar dateByAddingComponents:dayComponent toDate:self options:0];

}

/**

 *  获得某个时间这个星期的第一天

 *

 *  @param weekStartIndex 以星期几开始为第一天

 */

- (NSDate *)getWeekStartDateWithStartIndex:(NSInteger)weekStartIndex {

    NSUInteger weekDay = [[self getWeekNumber] integerValue];

    NSInteger gap = (weekStartIndex <= weekDay) ?  weekDay  : ( 7 + weekDay );

    NSInteger day = weekStartIndex - gap;

    return [self getDateByAddDay:day];

}

/**

 *  获得某个时间是星期几

 *

 *  @return 星期几

 */

- (NSNumber *)getWeekNumber {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *comps = [calendar components:NSWeekdayCalendarUnit fromDate:self];

    return [NSNumber numberWithInteger:([comps weekday] - 1)];

}

/**

 *  获得某个时间是周几

 *

 *  @return 格式:(周日、周一)

 */

-(NSString *)getWeekString {

    static NSDateFormatter *weekFormatter;

    if(!weekFormatter){

        weekFormatter = [[NSDateFormatter alloc] init];

        NSLocale *en_AU_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];

        [weekFormatter setLocale:en_AU_POSIX];

        [weekFormatter setDateFormat:@"E"];

    }

    NSString *temp = [weekFormatter stringFromDate:self];

    NSString *newWeek = nil;

    if ([temp containsString:@"周"]) {

        newWeek = [temp stringByReplacingOccurrencesOfString:@"周" withString:@""];

    }else {

        newWeek = temp;

    }

    return newWeek;

}

/**

 *  获取月和日

 *

 *  @return 格式:12月8

 */

- (NSString *)getMonthAndDayString {

    static NSDateFormatter *dateFormatter;

    if(!dateFormatter){

        dateFormatter = [[NSDateFormatter alloc] init];

        NSLocale* en_AU_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

        [dateFormatter setLocale:en_AU_POSIX];

        [dateFormatter setDateFormat:@"M月d"];

    }

    return [dateFormatter stringFromDate:self];

}

/**

 *  暂时不知道什么意思

 *

 *  @return 返回年月日

 */

- (NSDate *)midnightDate {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

    NSDateComponents *components = [calendar components:unitFlags fromDate:self];

    return [calendar dateFromComponents:components];

}

/**

 *  判断两个时间是否相等

 *

 *  @return YES/NO

 */

- (BOOL)isSameWithDate:(NSDate *)date{

    NSDate *date1 = [self midnightDate];

    NSDate *date2 = [date midnightDate];

    BOOL isSame = [date1 isEqualToDate:date2];

    return isSame;

}

/**

 *  判断某个时间小于当前时间或小于等于当前时间

 *

 *  @param flag flag(YES:小于当前时间/NO:小于等于当前时间)

 *

 *  @return YES/NO

 */

- (BOOL)isLessOrEqualToDayByBOOL:(BOOL)flag {

    NSDate *nowDate = [NSDate getCurrentSystemDate];

    if (!flag) {

        //返回当前时间一天后的时间

        nowDate = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60];

    }

    //earlierDate:获取较早的日期

    if([[nowDate earlierDate:self] isEqualToDate:self]) {

        return YES;

    } else {

        return NO;

    }

}

/**

 *  判断某个时间大于当前时间或大于等于当前时间

 *

 *  @param flag flag(YES:大于当前时间/NO:大于等于当前时间)

 *

 *  @return YES/NO

 */

- (BOOL)isGreaterOrEqualByBOOL:(BOOL)flag{

    NSDate *nowDate = [NSDate getCurrentSystemDate];

    if (!flag) {

        nowDate = [NSDate dateWithTimeIntervalSinceNow: - 24 * 60 * 60];

    }

    //laterDate:获取较晚的日期

    if([[nowDate laterDate:self] isEqualToDate:self]) {

        return YES;

    } else {

        return NO;

    }

}

/**

 *  判断某个时间大于当前时间加上day天得时间或大于等于当前时间加上day天得时间

 *

 *  @param day 当前时间加上day天

 *

 *  @param flag flag(YES:大于当前时间加上day天得时间/NO:大于等于当前时间加上day天得时间)

 *

 *  @return YES/NO

 */

- (BOOL)isGreaterOrEqualByDay:(NSUInteger)day withBool:(BOOL)flag {

    NSDate *nowDate = [NSDate getCurrentSystemDate];

    nowDate = [nowDate getDateByAddDay:day];

    if (!flag) {

        nowDate = [NSDate dateWithTimeIntervalSinceNow: - 24 * 60 * 60];

    }

    //laterDate:获取较晚的日期

    if([[nowDate laterDate:self] isEqualToDate:self]) {

        return YES;

    } else {

        return NO;

    }

}

/**

 *  判断某个时间是否在某个时间段

 *

 *  @param earlierDate 较早的时间

 *  @param laterDate   较晚的时间

 *

 *  @return YES/NO

 */

- (BOOL)isInTimeSlot:(NSDate *)earlierDate toDate:(NSDate *)laterDate {

    NSTimeInterval timeInterval = [[self midnightDate] timeIntervalSince1970];

    NSTimeInterval earlierTimeInterval = [[earlierDate midnightDate] timeIntervalSince1970];

    NSTimeInterval laterimeInterval = [[laterDate midnightDate] timeIntervalSince1970];

    BOOL isWithinDate = (timeInterval >= earlierTimeInterval && timeInterval <= laterimeInterval);

    return isWithinDate;

}

/**

 *  获取对象的字符串类型

 */

+ (NSString *)stringForId:(id)object {

    NSString *str = (NSString *)object;

    if (str == nil) return @"";

    if (str == NULL) return @"";

    if ([str isKindOfClass:[NSNull class]]) return @"";

    str = [NSString stringWithFormat:@"%@",str];

    return str;

}

/**

 *  时间戳转换为NSDate

 */

+ (NSDate *)getDateForTimeIntervalString:(NSString *)interval {

    interval = [self stringForId:interval];  // 强转字符串

    if (interval.length == 13) {            // Jave类型时间戳

        NSTimeInterval timeInterval = [interval doubleValue] / 1000;

        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];

        return date;

    } else if (interval.length == 10) {       // PHP类型时间戳

        NSTimeInterval timeInterval = [interval doubleValue];

        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];

        return date;

    } else {

        NSTimeInterval timeInterval = [interval d
4000
oubleValue];

        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];

        return date;

    }

    return nil;

}

/**

 *  Date转"时间戳"字符串(0.PHP类型-10位 1.Jave-13位)

 */

+ (NSString *)getTimeIntervalForDate:(NSDate *)date byType:(NSInteger)type {

    NSTimeInterval time;

    if (type == 1) {

        time = [date timeIntervalSince1970] * 1000;

    }else {

        time = [date timeIntervalSince1970];

    }

    NSString *returnTime = [NSString stringWithFormat:@"%f",time];

    if (returnTime.length > 13) {

        returnTime = [returnTime substringToIndex:13];

    }

    return returnTime;

}

/**

 *  Date 转换 NSString

 *  (自定义 默认格式:@"yyyy-MM-dd HH:mm:ss")

 */

+ (NSString *)getStringForDate:(NSDate *)date format:(NSString *)format {

    if (format == nil) format = @"yyyy-MM-dd HH:mm:ss";

    

    // 实例化一个NSDateFormatter对象

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

    

    // 设定时间格式,这里可以设置成自己需要的格式

    [dateFormatter setDateFormat:format];

    

    // 用[NSDate date]可以获取系统当前时间

    NSString *currentDateStr = [dateFormatter stringFromDate:date];

    return currentDateStr;

}

/**

 *  火星时间转地球时间

 *

 *  @param string

 *

 *  @return 月.日

 */

+ (NSString *)getTimeMD:(NSString *)string{

    if (![string isEqualToString:@""]) {

        NSDate *date =[NSDate dateWithTimeIntervalSince1970:[string doubleValue]/1000];

        //1.创建时间格式器

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

        //2.设置格式器的格式

        //注意格式的设置:yyyy代表年  MM代表月  dd代表日  hh代表12小时的小时(HH代表24小时)   mm代表分  ss代表秒

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

        [dateFormatter setDateFormat:@"M.dd"];

        NSString* dateString = [dateFormatter stringFromDate:date];

        return dateString;

    }else{

        return @"";

    }

    return @"";

}

+ (NSString *)getTimeYMD:(NSString *)string

{

    if (![string isEqualToString:@""]) {

        NSDate *date =[NSDate dateWithTimeIntervalSince1970:[string doubleValue]/1000];

        //1.创建时间格式器

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

        //2.设置格式器的格式

        //注意格式的设置:yyyy代表年  MM代表月  dd代表日  hh代表12小时的小时(HH代表24小时)   mm代表分  ss代表秒

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

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

        NSString* dateString = [dateFormatter stringFromDate:date];

        return dateString;

    }else{

        return @"";

    }

    return @"";

}

+ (NSDateComponents *)getDateComponentsWithDate:(NSDate *)date {

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

    NSDateComponents *component = [[NSDateComponents alloc] init];

    NSInteger unitFlags = NSYearCalendarUnit |

    NSMonthCalendarUnit |

    NSDayCalendarUnit |

    NSWeekdayCalendarUnit |

    NSHourCalendarUnit |

    NSMinuteCalendarUnit |

    NSSecondCalendarUnit;

    component = [calendar components:unitFlags fromDate:date];

    return component;

}

+ (NSString *)getTimeyMdHm:(NSString *)string

{

    if (![string isEqualToString:@""]) {

        NSDate *date =[NSDate dateWithTimeIntervalSince1970:[string doubleValue]/1000];

        //1.创建时间格式器

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

        //2.设置格式器的格式

        //注意格式的设置:yyyy代表年  MM代表月  dd代表日  hh代表12小时的小时(HH代表24小时)   mm代表分  ss代表秒

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

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

        NSString* dateString = [dateFormatter stringFromDate:date];

        return dateString;

    }else{

        return @"";

    }

    return @"";

    

}

/** 获取当前时间的“时间戳” -- 默认13位 */

+ (NSString *)getTimeIntervalStringByNew {

    NSDate *date = [NSDate date];

    NSString *returnTime = [self getTimeIntervalForDate:date byType:1];

    return returnTime;

}

/**

 *  时间戳 直接转成 NSString (自定义 默认格式:@"yyyy-MM-dd HH:mm:ss")

 */

+ (NSString *)getStringForTimeIntervalString:(NSString *)interval format:(NSString *)format {

    NSDate *date = [self getDateForTimeIntervalString:interval];

    return [self getStringForDate:date format:format];

}

/**

 *  NSString 转换 Date(自定义 默认格式:@"yyyy-MM-dd HH:mm:ss")

 */

+ (NSDate *)getDateForString:(NSString *)string format:(NSString *)format {

    if (format == nil) format = @"yyyy-MM-dd HH:mm:ss";

    //实例化一个NSDateFormatter对象

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

    //设定时间格式,这里可以设置成自己需要的格式

    [dateFormatter setDateFormat:format];

    return [dateFormatter dateFromString:string];

}

/**

 * 获取两个时间的时间差,返回秒数

 */

+ (NSInteger)getTimeDifferenceForDate:(NSDate *)date1 reduce:(NSDate *)date2 {

    NSTimeInterval interval1 = [date1 timeIntervalSinceNow];

    NSTimeInterval interval2 = [date2 timeIntervalSinceNow];

    return fabs(interval1 - interval2);

}

/**

 *  获得与当前时间的时间差

 */

+ (NSInteger)getTimeDifferenceCurrDateForDate:(NSDate *)date {

    NSDate *curDate = [NSDate getCurrentSystemDate];

    return [self getTimeDifferenceForDate:curDate reduce:date];

}

/**

 *  根据秒数获得相应的描述

 */

+ (NSString *)getDescribeForTimeInterval:(NSInteger)interval {

    NSString *describeStr = @"";

    if (interval < 60) {

        describeStr = [NSString stringWithFormat:@"%zd秒", interval];

    }else if (interval / 60 < 60) {

        describeStr = [NSString stringWithFormat:@"%zd分钟", interval / 60];

    }else if (interval / (60 * 60) < 24) {

        describeStr = [NSString stringWithFormat:@"%zd小时", interval / (60 * 60)];

    }else {

        describeStr = [NSString stringWithFormat:@"%zd天", interval / (60 * 60 * 24)];

    }

    return describeStr;

}

+ (NSString *)getTimeMonthWithType:(NSString *)type andInterval:(NSString *)interval{

    

    NSString *monthStr = [self getStringForTimeIntervalString:interval format:@"MM"];

    if (1 == [type integerValue]) {

        return [NSString stringWithFormat:@"%zd",[monthStr integerValue]];

    }

    

    NSString *currentMonth = [self getStringForDate:[NSDate date] format:@"MM"];

    if ([currentMonth isEqualToString:monthStr]) {

        return @"本";

    }

    

    switch ([monthStr integerValue]) {

        case 1:

            return @"一";

            break;

        case 2:

            return @"二";

            break;

        case 3:

            return @"三";

            break;

        case 4:

            return @"四";

            break;

        case 5:

            return @"五";

            break;

        case 6:

            return @"六";

            break;

        case 7:

            return @"七";

            break;

        case 8:

            return @"八";

            break;

        case 9:

            return @"九";

            break;

        case 10:

            return @"十";

            break;

        case 11:

            return @"十一";

            break;

        case 12:

            return @"十二";

            break;

        default:

            break;

    }

    

    return nil;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nsdate ios
相关文章推荐