NSDate--日期格式

日期格式:

年:
  • y 将年份 (0-9) 显示为不带前导零的数字
  • yy 以带前导零的两位数字格式显示年份
  • yyy 以四位数字格式显示年份
  • yyyy 以四位数字格式显示年份
月:
  • M 将月份显示为不带前导零的数字(如一月表示为 1)
  • MM 将月份显示为带前导零的数字(例如 01/12/01)
  • MMM 将月份显示为缩写形式(例如 Jan)
  • MMMM 将月份显示为完整月份名(例如 January)
    • 一月 Jan January
    • 二月 Feb February
    • 三月 Mar March
    • 四月 Apr April
    • 五月 May May
    • 六月 Jun June
    • 七月 Jul July
    • 八月 Aug August
    • 九月 Sep September
    • 十月 Oct October
    • 十一月 Nov November
    • 十二月 Dec December

星期:
  • EEE 将日显示为缩写形式(例如 Sun)
  • EEEE 将日显示为全名(例如 Sunday)
    • 星期一 Mon Monday
    • 星期二 Tue Tuesday
    • 星期三 Wed Wednesday
    • 星期四 Thu Thursday
    • 星期五 Fri Friday
    • 星期六 Sat Saturday
    • 星期天 Sun Sunday

日:
  • d 将日显示为不带前导零的数字(如 1)
  • dd 将日显示为带前导零的数字(如 01)

时:
  • h 使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)
  • hh 使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)
  • H 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)
  • HH 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)

分:
  • m 将分钟显示为不带前导零的数字(例如 12:1:15)
  • mm 将分钟显示为带前导零的数字(例如 12:01:15)

秒:
  • s 将秒显示为不带前导零的数字(例如 12:15:5)
  • ss 将秒显示为带前导零的数字(例如 12:15:05)
  • f 显示秒的小数部分
  • ff 将精确显示到百分之一秒
  • ffff 将精确显示到万分之一秒
  • 用户定义格式中最多可使用七个 f 符号

上下午:

  • t 使用 12 小时制
    • 中午之前任一小时显示大写的 A
    • 中午到 11:59 PM 之间的任一小时显示大写的 P
  • tt 对于使用 12 小时制的区域设置
    • 中午之前任一小时显示大写的 AM
    • 中午到 11:59 PM 之间的任一小时显示大写的 PM
  • 对于使用 24 小时制的区域设置,不显示任何字符

时区:

  • z 显示不带前导零的时区偏移量
  • zz 显示带前导零的时区偏移量(例如 -08)
  • zzz 显示完整的时区偏移量(例如 -0800)

纪元:

  • gg 显示时代/纪元字符串(例如 A.D.)

日期需求:

需求1.输出当前时间,例如2016-06-18 16:46:10 Saturday

    //1.用[NSDate date]可以获取系统当前时间
    NSDate * currentDate = [NSDate date];
    
    //2.实例化一个日期格式转换器
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
    
    //3.指定地区一定要指定,否则真机运行会有问题,统一用 en 即可
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"];
    
    //4.设置输出格式
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss EEEE";
    
    //5.通过日期格式转换器将NSDate类转换成可以输出的字符串.
    NSString *currentDateStr = [dateFormatter stringFromDate:currentDate];
    NSLog(@"当前的时间: %@",currentDateStr);

输出:

  

需求2.用下面格式输出时间:

  • 刚刚(一分钟内)
  • X分钟前(一小时内)
  • X小时前(当天)
  • 昨天 HH:mm(昨天)
  • MM-dd HH:mm(一年内)
  • yyyy-MM-dd HH:mm(更早期)

1.写了一个分类NSDate+Formatter 继承自NSDate.

NSDate+Formatter.h 文件:

#import <Foundation/Foundation.h>

@interface NSDate (Formatter)

//1.获取系统当前时间 格式:2016-06-20 10:22:11
+ (NSString *)dateCurrentTime;

//2.将CurrentTime格式时间转换成系统默认的NSDate格式
+ (NSDate *)dateConvertIntoNSDateWithCurrentTime:(NSString *)timeString;

//3.将数据库时间和当前时间相比,得出时间差,根据下面要求输出.
/*
 刚刚(一分钟内)
 X分钟前(一小时内)
 X小时前(当天)
 昨天 HH:mm(昨天)
 MM-dd HH:mm(一年内)
 yyyy-MM-dd HH:mm(更早期)
 */
+ (NSString *)dateDescriptionWithDate:(NSDate *)date;
@end

NSDate+Formatter.m文件:

//  NSDate+Formatter.m
//  NSDate
//
//  Created by 贾永强 on 16/6/20.
//  Copyright © 2016年 pandora. All rights reserved.
//

#import "NSDate+Formatter.h"

@implementation NSDate (Formatter)

//获取系统当前时间 格式:2016-06-20 10:22:11
+ (NSString *)dateCurrentTime{
    //1.用[NSDate date]可以获取系统当前时间
    
    NSDate * currentDate = [NSDate date];//系统默认格式:2016-06-20 02:22:11 +0000
    
    //2.实例化一个日期格式转换器
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
    
    //3.指定地区一定要指定,否则真机运行会有问题,统一用 en 即可
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"];
    
    //4.设置输出格式
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    
    //5.通过日期格式转换器将NSDate类转换成可以输出的字符串.
    NSString *currentDateStr = [dateFormatter stringFromDate:currentDate];
    
    return currentDateStr;
}


//将CurrentTime格式时间转换成系统默认的NSDate格式
+ (NSDate *)dateConvertIntoNSDateWithCurrentTime:(NSString *)timeString{
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *date = [dateFormatter dateFromString:timeString];
    return date;
}

//将数据库时间和当前时间相比,得出时间差.
+ (NSString *)dateDescriptionWithDate:(NSDate *)date{
    
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en"];
    NSString *dateFormatterString = @" HH:mm";
    
    // NSCalendar日历类,提供了非常丰富的日期转换函数
    //1. 取出当前的日期
    NSCalendar *currentCalendar = [NSCalendar currentCalendar];
    
    //2. 用当前日期currentCalendar和传入的date比较,判断是否是今天
    if ([currentCalendar isDateInToday:date]) {
        
        // 使用日期和当前的系统时间进行比较,判断相差的秒数
        int seconds =  CFDateGetTimeIntervalSinceDate((CFDateRef)[NSDate date], (CFDateRef)date);
        if(seconds < 60){
            return @"刚刚";
        }else if (seconds < 3600){
            return [NSString stringWithFormat:@"%d 分钟前",seconds / 60];
        }else{
            return [NSString stringWithFormat:@"%d 小时前",seconds / 3600];
        }    
    }
    
    //3. 判断是否是昨天
    if ([currentCalendar isDateInYesterday:date]){
        NSString *tempString = @"昨天";
        dateFormatterString = [tempString stringByAppendingString:dateFormatterString];
        
    }else{
        //4.比较函数,返回完整的自然年数. 当期日期和传入日期比较,如果时间间隔<1年,返回0. 0年<时间间隔<2年,返回1 ....
        NSDateComponents *dateComponents = [currentCalendar components:NSCalendarUnitYear fromDate:date toDate:[NSDate date]options:(NSCalendarWrapComponents)];
        
        if (dateComponents.year == 0) {//时间间隔==0,说明是今年
            dateFormatterString = @"MM-dd HH:mm";
        }else{
            dateFormatterString = @"yyyy-MM-dd HH:mm:ss";
        }
    }

    dateFormatter.dateFormat =dateFormatterString;
    NSString *currentDateStr = [dateFormatter stringFromDate:date];
    return currentDateStr;
}
@end
原文地址:https://www.cnblogs.com/jiayongqiang/p/5596352.html