zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    最短路径:HDU2006-一个人的旅行(多个起点,多个终点)
    最短路径(最基础,经典的模板和思想):HDU-2544最短路
    数学算法:poweroj1026-丑数(根据固定倍数得到从小到大的序列)
    动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
    数论:HDU1066-Last non-zero Digit in N!
    容斥原理:HDU-4135Co-prime
    数学算法:求一个数的质因子
    动态规划(入门,滚动数组,记录的都是状态):SWUSTACM-1010 魔兽争霸之最后的反击
    动态规划(入门):各种数字三角形
    动态规划:HDU2571-命运
  • 原文地址:https://www.cnblogs.com/mkai/p/5678574.html
Copyright © 2011-2022 走看看