单军华
2018-07-11 7b02207537d35bfa1714bf8beafc921f717d100a
screendisplay/screendisplay/Classes/Utility/DateUtil.m
New file
@@ -0,0 +1,227 @@
//
//  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