本文通过NSDateFormatter自定义日期格式, 通过NSDateComponents获取日期组件. 以及获取时间戳的方法.
在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //设定时间格式,这里可以设置成自己需要的格式 [dateFormatter setDateFormat:@"GG | yyyy年MM月dd日 | hh:mm:ss.SSS aa | EEEE EE | OO O | zzzz z"]; //用[NSDate date]可以获取系统当前时间 NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
//输出格式为:
NSLog(@"%@",currentDateStr);
打印结果: 公元 | 2016年03月25日 | 02:48:26.523 下午 | 星期五 周五 | GMT+8 | 中国标准时间 GMT+8
GG: 显示时代/纪元字符串(例如 公元)
OO: 显示时区 (例如 GMT+08:00)
O: 显示时区 (例如 GMT+8)
zzzz: 显示时区 (例如 中国标准时间)
z: 显示时区 (例如 GMT+8)
yyyy: 将年份 (0-9) 显示为不带前导零的数字 (例如 2015)
yy: 以带前导零的两位数字格式显示年份 (例如 15)
MMMM: 将月份显示为完整月份名(例如 三月或十二月)
MM: 将月份显示为带前导零的数字(例如 03或12)
M: 将月份显示为不带前导零的数字(例如 3或12)
dd: 将日显示为带前导零的数字(如 01或30)。
d: 将日显示为不带前导零的数字(如 1或30)
EEEE: 将日显示为全名(例如 星期五)
EE: 将日显示为缩写形式(例如 周五)
HH: 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)
H: 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)
hh: 使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15)
h: 使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15)
aa: 辅助12小时制, 显示上午/下午 (例如 上午或下午)
mm: 将分钟显示为带前导零的数字(例如 12:01:15)
m: 将分钟显示为不带前导零的数字(例如 12:1:15)
ss: 将秒显示为带前导零的数字(例如 12:15:05)
s: 将秒显示为不带前导零的数字(例如 12:15:5)
SSS: 毫秒数 (例如 005或035或756)
SS: 毫秒数 (例如 05或35或75)
S: 毫秒数 (例如 5或0或7)
NSDateComponents封装在一个可扩展的,面向对象的方式的日期组件。它是用来弥补时间的日期和时间组件提供一个指定日期:年月日时分秒等。它也可以用来指定的时间,例如,5小时16分钟。一个NSDateComponents对象不需要定义所有组件领域。当一个NSDateComponents的新实例被创建,日期组件被设置为NSUndefinedDateComponent。
用NSDateComponents来指定日期, 可以获取日期组件:
NSDate *today = [NSDate date];
unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateCompont = [calendar components:unitFlags fromDate:today];
NSInteger year = [dateCompont year];
NSInteger month = [dateCompont month];
NSInteger day = [dateCompont day];
NSInteger hour = [dateCompont hour];
NSInteger minute = [dateCompont minute];
NSInteger second = [dateCompont second];
NSLog(@"年=%ld,月=%ld,日=%ld,时=%ld,分=%ld,秒=%ld",year,month,day,hour,minute,second);
打印结果: 年=2016,月=3,日=25,时=14,分=32,秒=5
用日期组件获取两个日期时间差:
NSDateComponents *dateCompont = [calendar components:unitFlags fromDate:today toDate:endDate options:NSCalendarWrapComponents];
要获取到时间戳里的毫秒单位:
UInt64 recordTime = [[NSDate date] timeIntervalSince1970]*1000;
首先 [[NSDate date] timeIntervalSince1970] 是可以获取到后面的毫秒/微秒的 ,只是在保存的时候省略掉了, 如一个时间戳不省略的情况下为 1395399556.862046 ,省略掉后为一般所见 1395399556 。所以想取得毫秒时用获取到的时间戳 1000 ,想取得微秒时 用取到的时间戳 1000 * 1000 。