// // DateUtil.m // airtree // // Created by WindShan on 2016/11/17. // Copyright © 2016年 Gloria. All rights reserved. // #import "DateUtil.h" #define YMDFormat @"YYYY-MM-dd" #define YMDEHMFormat @"YYYY-MM-dd EEE HH:mm" #define YMDHMSFormat @"YYYY-MM-dd HH:mm:ss" static NSDateFormatter *s_formatterYMD = nil; static NSDateFormatter *s_formatterYMDEHM = nil; static NSDateFormatter *s_formatterYMDHMS = nil; @implementation DateUtil + (NSDate *)adjustDateHour:(NSDate *)srcDate minHour:(NSUInteger)minHour maxHour:(NSUInteger)maxHour fitHour:(NSUInteger)fitHour { //参数有效性检查 if (srcDate == nil) { return srcDate; } if (minHour >= 24 || maxHour >= 24 || fitHour >=24) { minHour %= 24; maxHour %= 24; fitHour %= 24; } NSInteger unitFlags = NSHourCalendarUnit; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *componets = [calendar components:unitFlags fromDate:srcDate]; NSInteger hour = [componets hour]; if (hour <= minHour) { //(NSInteger)(fitHour-hour)*60*60:必须先转为NSInteger,否则无符号相减后的负数是自动转换为非常大的double类型 srcDate = [srcDate dateByAddingTimeInterval:(NSInteger)(fitHour-hour)*60*60]; } else if (hour >= maxHour) { srcDate = [srcDate dateByAddingTimeInterval:(24+fitHour-hour)*60*60]; } return srcDate; } + (NSString *)stringFromDate:(NSDate *)date formater:(NSDateFormatter * __strong *)formatter format:(NSString *)format { if (*formatter == nil) { *formatter = [[NSDateFormatter alloc] init]; [*formatter setLocale:[NSLocale currentLocale]]; [*formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]]; [*formatter setDateStyle:NSDateFormatterMediumStyle]; [*formatter setTimeStyle:NSDateFormatterShortStyle]; [*formatter setDateFormat:format]; } return [*formatter stringFromDate:date]; } + (NSDate *)dateFromString:(NSString *)dateString formater:(NSDateFormatter * __strong *)formatter format:(NSString *)format { if (dateString.length <= 0) { return [NSDate date]; } if (*formatter == nil) { *formatter = [[NSDateFormatter alloc] init]; [*formatter setLocale:[NSLocale currentLocale]]; [*formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]]; [*formatter setDateStyle:NSDateFormatterMediumStyle]; [*formatter setTimeStyle:NSDateFormatterShortStyle]; [*formatter setDateFormat:format]; } return [*formatter dateFromString:dateString]; } + (NSString *)stringFromDateYMD:(NSDate *)date { return [DateUtil stringFromDate:date formater:&s_formatterYMD format:YMDFormat]; } + (NSDate *)dateFromStringYMD:(NSString *)dateString { return [DateUtil dateFromString:dateString formater:&s_formatterYMD format:YMDFormat]; } + (NSString *)stringFromDateYMDEHM:(NSDate *)date { return [DateUtil stringFromDate:date formater:&s_formatterYMDEHM format:YMDEHMFormat]; } + (NSDate *)dateFromStringYMDEHM:(NSString *)dateString { return [DateUtil dateFromString:dateString formater:&s_formatterYMDEHM format:YMDEHMFormat]; } + (NSString *)stringFromDateYMDHMS:(NSDate *)date { return [DateUtil stringFromDate:date formater:&s_formatterYMDHMS format:YMDHMSFormat]; } + (NSDate *)dateFromStringYMDHMS:(NSString *)dateString { return [DateUtil dateFromString:dateString formater:&s_formatterYMDHMS format:YMDHMSFormat]; } + (NSString *)getYear:(NSDate *)date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = nil; /* // 年月日获得 comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date]; */ comps = [calendar components:NSCalendarUnitYear fromDate:date]; NSString *year = [NSString stringWithFormat:@"%@", @([comps year])]; return year; } + (NSString *)getMonth:(NSDate *)date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = nil; comps = [calendar components:NSCalendarUnitMonth fromDate:date]; NSString *month = [NSString stringWithFormat:@"%@", @([comps month])]; return month; } + (NSString *)getDay:(NSDate *)date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = nil; comps = [calendar components: NSCalendarUnitDay fromDate:date]; NSString *day = [NSString stringWithFormat:@"%@", @([comps day])]; return day; } + (NSString *)getHour:(NSDate *)date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = nil; comps = [calendar components: NSCalendarUnitHour fromDate:date]; NSString *hour = [NSString stringWithFormat:@"%@", @([comps day])]; return hour; } + (NSString *)getMinute:(NSDate *)date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = nil; comps = [calendar components: NSCalendarUnitMinute fromDate:date]; NSString *minute = [NSString stringWithFormat:@"%@", @([comps day])]; return minute; } + (NSString *)getSecond:(NSDate *)date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = nil; comps = [calendar components: NSCalendarUnitSecond fromDate:date]; NSString *second = [NSString stringWithFormat:@"%@", @([comps day])]; return second; } + (NSString *)stringFromLong:(long)date { NSDate *dateTime = [[NSDate alloc] initWithTimeIntervalSinceNow:date/1000]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setTimeStyle:NSDateFormatterNoStyle]; [formatter setDateStyle:NSDateFormatterMediumStyle]; NSLocale *formatterLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"en_us"]; [formatter setLocale:formatterLocal]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; NSString *dateString = [formatter stringFromDate:dateTime]; return dateString; } //获取指定时间前n天的时间日期 2015-10-30 + (NSString *)stringFromOffDateYMD:(NSDate *)date dayCount:(int)day { NSTimeInterval time = day * 24 * 60 * 60;//n天的秒数 //得到一年之前的当前时间(-:表示向前的时间间隔(即去年),如果没有,则表示向后的时间间隔(即明年)) NSDate * lastDateTime = [date dateByAddingTimeInterval:time]; return [DateUtil stringFromDateYMD:lastDateTime]; } //是否是今天 + (BOOL)isToday:(NSString *)dateString { NSString *nowString = [DateUtil stringFromDateYMD:[NSDate date]]; return [nowString isEqualToString:dateString]; } @end