NSDate--日期格式

时间:2023-03-08 23:30:23
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);

输出:

  NSDate--日期格式

需求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 < ){
return @"刚刚";
}else if (seconds < ){
return [NSString stringWithFormat:@"%d 分钟前",seconds / ];
}else{
return [NSString stringWithFormat:@"%d 小时前",seconds / ];
}
} //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,说明是今年
dateFormatterString = @"MM-dd HH:mm";
}else{
dateFormatterString = @"yyyy-MM-dd HH:mm:ss";
}
} dateFormatter.dateFormat =dateFormatterString;
NSString *currentDateStr = [dateFormatter stringFromDate:date];
return currentDateStr;
}
@end