New file |
| | |
| | | // |
| | | // 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 |