方法一:用到NSDate、NSCalender和NSComponents
NSDate *date = [NSDate date]; //这个是NSDate类型的日期,所要获取的年月日都放在这里
NSCalendar *currentCalender = [NSCalendar currentCalendar];
NSDateComponents * comps; //存放各种日期元素的容器
comps = [currentCalender components:(NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitYear|NSCalendarUnitWeekOfMonth|NSCalendarUnitDay) fromDate:currentDate];
//这句是说你要获取日期的元素有哪些。获取年就要写NSYearCalendarUnit,获取小时就要写NSHourCalendarUnit,中间用|隔开;
int hour = (int)[comps hour];
int mintue = (int)[comps minute];
int second = (int)[comps second];
int year = (int)[comps year];
NSIteger month = [comps month];
NSIteger day = [comps day];
//获取关于星期的元素
comps = [calendar components:(NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit) fromDate:currentDate];
NSInteger week = [comps week]; // 今年的第几周
NSInteger weekday = [comps weekday]; // 星期几(注意,周日是“1”,周一是“2”。。。。)
NSInteger weekdayOrdinal = [comps weekdayOrdinal]; // 这个月的第几周
方法二:NSDate、NSDateFormatter
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formtter setDateFormat:@
"yyyy-MM-dd"
]; //获取年月日,MM(月)必须是大写,为了和mm(分)区分
[formatter
setDateFormat
:
@"yyyy-MM-dd hh:mm:ss"
];//获取年月日时分秒
[formatter
setDateFormat
:
@"hhmmss"
];//获取时分秒,hh是12小时制,HH是24小时制
[formatter
setDateFormat
:
@"yyyy-MM-dd EEEE HH:mm:ss a"
];
[formtter setDateFormat:@
"yyyy/MM/dd"
];
//
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: 毫秒
下面附上几个格式:这个是从Cocoachina上来
yyyy:MM:dd G 'at' HH:mm:ss zzz 1996.07.10 AD at 15:08:56 PDT
EEE, MMM d, "yy Wed,july 10, '99
h:mm a 12:08 PM
hh 'o"clock' a,zzzz 12 o'clock PM, Pacific Daylight Time
K:mm a, z 0:00 PM, PST
yyyyy,MMMM.dd GGG hh:mm aaa 01996.july.10 AD 12:08 PM
formatter.timeStyle = kCFDateFormatterShortStyle;
kCFDateFormatterNoStyle = 0, // 无输出
kCFDateFormatterShortStyle = 1, // 10/29/12, 2:27 PM
kCFDateFormatterMediumStyle = 2, // Oct 29, 2012, 2:36:59 PM
kCFDateFormatterLongStyle = 3, // October 29, 2012, 2:38:46 PM GMT+08:00
kCFDateFormatterFullStyle = 4 // Monday, October 29, 2012, 2:39:56 PM China Standard Time
};
kCFDateFormatterNoStyle = 0, // 无输出
kCFDateFormatterShortStyle = 1, // 12-10-29 下午2:52
kCFDateFormatterMediumStyle = 2, // 2012-10-29 下午2:51:43
kCFDateFormatterLongStyle = 3, // 2012年10月29日 GMT+0800下午2时51分08秒
kCFDateFormatterFullStyle = 4 // 2012年10月29日星期一 中国标准时间下午2时46分49秒
};
注:NSDateFormatter配合NSDate与NSString之间的转化:
NSDateFormatter有下面2个方法:
- (NSString *)stringFromDate:(NSDate *)date;//NSDate转NSString
- (NSDate *)dateFromString:(NSString *)string;//NSString转NSDate
e.g.
NSString *dateString=@"1900-01-01";
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date=[dateFormatter dateFromString:dateString];
注:关于NSString转NSDate少一天的解决办法
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit |NSYearCalendarUnit) fromDate:[NSDate date]];
NSDate *todayDate = [calendar dateFromComponents:components];