天天看点

iOS关于NSDate、NSString、NSDateFormatter设置时间格式等问题

1 获取当前时间

// 当前时间
NSDate *now = [NSDate date];
// 获取时间中的详细信息年、月、日、时、分、秒
NSCalendar *calendar = [NSCalendarcurrentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit | NSHourCalendarUnit|NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *dateComponent = [calendarcomponents:unitFlags fromDate:now];
int year = [dateComponentyear];
int month = [dateComponentmonth];
int day = [dateComponentday];
int hour = [dateComponenthour];
int minute = [dateComponentminute];
int second = [dateComponentsecond];
           

2 字符串、时间相互转换

//字符串转换为日期
//实例化一个NSDateFormatter对象
NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date =[dateFormat dateFromString:@"1980-01-01 00:00:01"];

//日期转换为字符串
//实例化一个NSDateFormatter对象
NSDateFormatter* dateFormat = [[NSDateFormatteralloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
           

3 时间设置 dateFormat 格式注意事项

① 年 设置格式为 yyyy, 苹果开发文档中明确指出

It uses yyyy to specify the year component. A common mistake is to use YYYY. yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), usedin the ISO year-week calendar. In most cases, yyyy and YYYY yield the same number, however they may be different. Typically you should use the calendar year.

年份如果用大Y会是这周的年份,小y才是标准的年份例如2013年12月29号开始,如果用大Y的话就是2014年的第一周了,年份会转成2014

虽然不一定会出错,但是为了安全,还是使用yyyy 比较可靠。

② iOS-NSDateFormatter 格式说明:

G: 公元时代,例如AD公元

yy: 年的后2位

yyyy: 完整年

MM: 月,显示为1-12

MMM: 月,显示为英文月份简写,如 Jan

MMMM: 月,显示为英文月份全称,如 Janualy

dd: 日,2位数表示,如02

d: 日,1-2位显示,如2

EEE: 简写星期几,如Sun

EEEE: 全写星期几,如Sunday

aa: 上下午,AM/PM

H: 时,24小时制,0-23

K:时,12小时制,0-11

m: 分,1-2位

mm: 分,2位

s: 秒,1-2位

ss: 秒,2位

S: 毫秒

常用日期结构:

yyyy-MM-dd HH:mm:ss.SSS

yyyy-MM-dd HH:mm:ss

yyyy-MM-dd

MM dd yyyy