iOS 日期的一些操作

537 阅读2分钟
  • NSDate
NSDate *date = [NSDate date];  // 当前时间
NSLog(@"%@",date.description); // 2021-11-04 02:02:42 +0000
  • NSDateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
NSString *dateStr = [dateFormatter stringFromDate:date];
NSLog(@"%@",dateStr);
NSDateFormatterNoStyle      没有任何效果,值为空
NSDateFormatterShortStyle   11/4/21 (21114日)
NSDateFormatterMediumStyle  Nov 4, 2021
NSDateFormatterLongStyle    November 4, 2021
NSDateFormatterFullStyle    Thursday, November 4, 2021
计算日期
  • 设置时间间隔
NSTimeInterval second = 24*60*60;  // 一天的秒数
  • 昨天
NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-second];
NSLog(@"昨天 %@",yesterday.description);  // 昨天 2021-11-03 02:15:56 +0000
  • 明天
NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:second];
NSLog(@"今天 %@",tomorrow.description); // 今天 2021-11-05 02:15:56 +0000
日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:MM:SS"];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSLog(@"%@",dateString);  //  2021-11-04 10:11:77
  • 时间戳
// 时间戳 通常是一个字符序列,唯一地标识某一刻的时间
// 格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数
NSDate *date = [NSDate date];
NSTimeInterval interval = [date timeIntervalSince1970]; // 1635992924.752772
NSTimeInterval interval2001 = [date timeIntervalSinceReferenceDate]; // //与2001.1.1 00:00:00 的时间间隔 657685811.483524
NSTimeInterval intervalNow = [date timeIntervalSinceNow]; // date被创建后与程序运行到这一行代码的时间间隔 -0.000006
  • 不可到达的过去和未来的两个时间点
NSDate *futureDate = [NSDate distantFuture]; // Mon Jan  1 08:00:00 4001
NSDate *pastDate = [NSDate distantPast]; // Sat Dec 30 08:05:43 0000
  • 日期比较操作
[pastDate isEqualToDate:futureDate]; // 判断时间是否相同
NSComparisonResult result = [firstDate compare:secondDate]; // 时间比较
[firstDate earlierDate:secondDate]; // 返回较早的日期
[firstDate laterDate:secondDate]; // 返回较晚的日期
  • NSDateComponents
NSDateComponents *firstComponents = [[NSDateComponents alloc] init];
firstComponents.year = 2021;
firstComponents.month = 9;
firstComponents.day = 25;
firstComponents.hour = 8;
firstComponents.minute = 30;
firstComponents.second = 15;
NSDate *firstDate = [calendar dateFromComponents:firstComponents];
NSLog(@"firstDate - %@",firstDate);
  • 比较两个日期间隔天数
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *startDate = [dateFormatter dateFromString:@"2021-09-25"];
NSDate *endDate = [dateFormatter dateFromString:@"2021-11-07"];

NSCalendar *calendar = [NSCalendar currentCalendar];
/*
NSCalendarUnitDay : 天
NSCalendarUnitYear : 年
NSCalendarUnitMonth : 月
NSCalendarUnitHour : 时
NSCalendarUnitMinute : 分
NSCalendarUnitSecond : 秒
*/
NSCalendarUnit unit = NSCalendarUnitDay;//只比较天数差异
//比较的结果是NSDateComponents类对象
NSDateComponents *delta = [calendar components:unit fromDate:startDate toDate:endDate options:0];
NSLog(@"%@",delta);
NSLog(@"%ld",delta.day);