ios开发 日期处理

  1 ## NSDateFormatter的作用
  2 - NSString \* -> NSDate *
  3 
  4 ```obj
  5 - (nullable NSDate *)dateFromString:(NSString *)string;
  6 ```
  7 
  8 - NSDate \* -> NSString *
  9 
 10 ```objc
 11 - (NSString *)stringFromDate:(NSDate *)date;
 12 ```
 13 
 14 ## 常见的日期格式
 15 - http://www.cnblogs.com/mailingfeng/archive/2011/07/28/2120422.html
 16 
 17 ## NSString \* -> NSDate *
 18 - 2015-11-20 09:10:05
 19 
 20 ```objc
 21 // 时间字符串
 22 NSString *string = @"2015-11-20 09:10:05";
 23 
 24 // 日期格式化类
 25 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
 26 // 设置日期格式(为了转换成功)
 27 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
 28 
 29 // NSString * -> NSDate *
 30 NSDate *date = [fmt dateFromString:string];
 31 
 32 NSLog(@"%@", date);
 33 ```
 34 
 35 - 11月-20号/2015年 09-10:05秒
 36 
 37 ```objc
 38 // 时间字符串
 39 NSString *string = @"11月-20号/2015年 09-10:05秒";
 40 
 41 // 日期格式化类
 42 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
 43 fmt.dateFormat = @"MM月-dd号/yyyy年 HH-mm:ss秒";
 44 
 45 NSLog(@"%@", [fmt dateFromString:string]);
 46 ```
 47 
 48 - Tue May 31 17:46:55 +0800 2011
 49 
 50 ```objc
 51 // 时间字符串
 52 NSString *string = @"Tue May 31 17:46:55 +0800 2011";
 53 
 54 // 日期格式化类
 55 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
 56 fmt.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy";
 57 // fmt.dateFormat = @"EEE MMM dd HH:mm:ss ZZZZ yyyy";
 58 // 设置语言区域(因为这种时间是欧美常用时间)
 59 fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
 60 
 61 NSLog(@"%@", [fmt dateFromString:string]);
 62 ```
 63 
 64 - 1745645645645
 65 
 66 ```objc
 67 // 时间戳 : 从1970年1月1号 00:00:00开始走过的毫秒数
 68 
 69 // 时间字符串 - 时间戳
 70 NSString *string = @"1745645645645";
 71 NSTimeInterval second = string.longLongValue / 1000.0;
 72 
 73 // 时间戳 -> NSDate *
 74 NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
 75 NSLog(@"%@", date);
 76 ```
 77 
 78 ## NSCalendar的注意点
 79 ```objc
 80 #define iOS(version) ([UIDevice currentDevice].systemVersion.doubleValue >= (version))
 81 
 82 NSCalendar *calendar = nil;
 83 if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
 84     calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
 85 } else {
 86     calendar = [NSCalendar currentCalendar];
 87 }
 88 
 89 NSCalendar *calendar = nil;
 90 if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
 91     calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
 92 } else {
 93     calendar = [NSCalendar currentCalendar];
 94 }
 95 ```
 96 
 97 ## NSDate \* -> NSString *
 98 ```objc
 99 NSDate *date = [NSDate date];
100 
101 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
102 fmt.dateFormat = @"yyyy年MM月dd号 HH:mm:ss";
103 
104 NSString *string = [fmt stringFromDate:date];
105 ```
106 
107 ## 获得日期元素
108 ```objc
109 NSString *string = @"2015-11-20 09:10:05";
110 
111 NSString *month = [string substringWithRange:NSMakeRange(5, 2)];
112 
113 NSLog(@"%@", month);
114 ```
115 ```objc
116 // 时间字符串
117 NSString *string = @"2015-11-20 09:10:05";
118 
119 // 日期格式化类
120 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
121 // 设置日期格式(为了转换成功)
122 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
123 
124 // NSString * -> NSDate *
125 NSDate *date = [fmt dateFromString:string];
126 
127 // 利用NSCalendar处理日期
128 NSCalendar *calendar = [NSCalendar currentCalendar];
129 NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
130 NSInteger hour = [calendar component:NSCalendarUnitHour fromDate:date];
131 NSInteger minute = [calendar component:NSCalendarUnitMinute fromDate:date];
132 
133 NSLog(@"%zd %zd %zd", month, hour, minute);
134 ```
135 ```objc
136 // 时间字符串
137 NSString *string = @"2015-11-20 09:10:05";
138 
139 // 日期格式化类
140 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
141 // 设置日期格式(为了转换成功)
142 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
143 
144 // NSString * -> NSDate *
145 NSDate *date = [fmt dateFromString:string];
146 
147 // 利用NSCalendar处理日期
148 NSCalendar *calendar = [NSCalendar currentCalendar];
149 
150 NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
151 NSDateComponents *cmps = [calendar components:unit  fromDate:date];
152 
153 //    NSLog(@"%zd %zd %zd", cmps.year, cmps.month, cmps.day);
154 NSLog(@"%@", cmps);
155 ```
156 
157 ## 日期比较
158 ```objc
159 // 时间字符串
160 NSString *createdAtString = @"2015-11-20 11:10:05";
161 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
162 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
163 NSDate *createdAtDate = [fmt dateFromString:createdAtString];
164 
165 // 手机当前时间
166 NSDate *nowDate = [NSDate date];
167 
168 /**
169  NSComparisonResult的取值
170  NSOrderedAscending = -1L, // 升序, 越往右边越大
171  NSOrderedSame,  // 相等
172  NSOrderedDescending // 降序, 越往右边越小
173  */
174 // 获得比较结果(谁大谁小)
175 NSComparisonResult result = [nowDate compare:createdAtDate];
176 if (result == NSOrderedAscending) { // 升序, 越往右边越大
177     NSLog(@"createdAtDate > nowDate");
178 } else if (result == NSOrderedDescending) { // 降序, 越往右边越小
179     NSLog(@"createdAtDate < nowDate");
180 } else {
181     NSLog(@"createdAtDate == nowDate");
182 }
183 ```
184 ```objc
185 // 时间字符串
186 NSString *createdAtString = @"2015-11-20 09:10:05";
187 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
188 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
189 NSDate *createdAtDate = [fmt dateFromString:createdAtString];
190 
191 // 手机当前时间
192 //    NSDate *nowDate = [NSDate date];
193 
194 // 获得createdAtDate和nowDate的时间间隔(间隔多少秒)
195 //    NSTimeInterval interval = [nowDate timeIntervalSinceDate:createdAtDate];
196 NSTimeInterval interval = [createdAtDate timeIntervalSinceNow];
197 NSLog(@"%f", interval);
198 ```
199 ```objc
200 NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
201 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
202 
203 // 时间字符串
204 NSString *createdAtString = @"2015-11-01 09:10:05";
205 NSDate *createdAtDate = [fmt dateFromString:createdAtString];
206 
207 // 其他时间
208 NSString *otherString = @"2015-10-31 08:56:45";
209 NSDate *otherDate = [fmt dateFromString:otherString];
210 
211 // 获得NSCalendar
212 NSCalendar *calendar = nil;
213 if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
214     calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
215 } else {
216     calendar = [NSCalendar currentCalendar];
217 }
218 
219 // 获得日期之间的间隔
220 NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
221 NSDateComponents *cmps = [calendar components:unit fromDate:createdAtDate toDate:otherDate options:0];
222 
223 NSLog(@"%@", cmps);
224 ```
225 
226 ## 条件判断的一些注意点
227 ```objc
228 1.判断一个数组中是否有具体内容
229 1> 正确
230 if (array.count) {
231 
232 }
233 
234 2> 错误
235 if (array) {
236 
237 }
238 
239 2.判断一个字符串是否有具体内容
240 1> 正确
241 if (string.length) {
242 
243 }
244 
245 2> 错误
246 if (string) {
247 
248 }
249 
250 ```
View Code

 

posted @ 2016-07-17 14:55  超神船长  阅读(159)  评论(0编辑  收藏  举报