兴趣iOS

完整的时间计算

2016-11-30  本文已影响31人  沧海的风

做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,获取当前系统时间这么简单。我们需要了解与时间相关的各种API之间的差别,再因场景而异去设计相应的机制。

}

时间描述

  #import <Foundation/Foundation.h>

  @interface NSDate (CZH)
  /// 日期描述字符串
  /// 格式如下
  ///     -   刚刚(一分钟内)
  ///     -   X分钟前(一小时内)
  ///     -   X小时前(当天)
  ///     -   昨天 HH:mm(昨天)
  ///     -   MM-dd HH:mm(一年内)
  ///     -   yyyy-MM-dd HH:mm(更早期)
  - (NSString *)czh_dateDescription;

  @end



  #import "NSDate+CZH.h"

  @implementation NSDate (CZH)
  - (NSString *)czh_dateDescription
  {

      // 1. 获取当前日历
      NSCalendar *calendar = [NSCalendar currentCalendar];

     // 2. 判断是否是今天
      if ([calendar isDateInToday:self]) {
          NSInteger interval = ABS((NSInteger)[self timeIntervalSinceNow]);
          if (interval < 60) {
              return @"刚刚";
          }
          interval /= 60;
          if (interval < 60) {
              return [NSString stringWithFormat:@"%zd 分钟前", interval];
          }
          return [NSString stringWithFormat:@"%zd 小时前", interval / 60];
      }

      // 3. 昨天
      NSMutableString *formatString = [NSMutableString stringWithString:@" HH:mm"];
      if ([calendar isDateInYesterday:self]) {
          [formatString insertString:@"昨天" atIndex:0];
      } else {
          [formatString insertString:@"MM-dd" atIndex:0];
    
          // 4. 是否当年
          NSDateComponents *components = [calendar components:NSCalendarUnitYear fromDate:self toDate:[NSDate date] options:0];
          if (components.year != 0) {
              [formatString insertString:@"yyyy-" atIndex:0];
          }
      }

      // 5. 转换格式字符串
      NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
      fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en"];
      fmt.dateFormat = formatString;

      return [fmt stringFromDate:self];
  }
  @end
上一篇 下一篇

猜你喜欢

热点阅读