单军华
2018-05-04 7db6ba57b17fb7c0c364219750b14ee3d5cc351b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//
//  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:NSYearCalendarUnit fromDate:date];
    NSString *year = [NSString stringWithFormat:@"%@", @([comps year])];
    
    return year;
}
 
+ (NSString *)getMonth:(NSDate *)date
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = nil;
    
    comps = [calendar components:NSMonthCalendarUnit fromDate:date];
    NSString *month = [NSString stringWithFormat:@"%@", @([comps month])];
    
    return month;
}
 
+ (NSString *)getDay:(NSDate *)date
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = nil;
    
    comps = [calendar components:
             NSDayCalendarUnit fromDate:date];
    NSString *day = [NSString stringWithFormat:@"%@", @([comps day])];
    
    return day;
}
 
+ (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