在開發(fā)iOS程序時纬纪,有時候需要將時間格式調(diào)整成自己希望的格式揍移,這個時候我們可以用NSDateFormatter類來處理。
例如:
//實例化一個NSDateFormatter對象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//設(shè)定時間格式,這里可以設(shè)置成自己需要的格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//用[NSDate date]可以獲取系統(tǒng)當(dāng)前時間
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
//輸出格式為:2010-10-27 10:22:13
NSLog(@"%@",currentDateStr);
//alloc后對不使用的對象別忘了release
[dateFormatter release];
字符說明
(:)
時間分隔符呆盖。在某些區(qū)域設(shè)置中炫彩,可以使用其他字符表示時間分隔符。時間分隔符在格式化時間值時分隔小時絮短、分鐘和秒江兢。格式化輸出中用作時間分隔符的實際字符由您的應(yīng)用程序的當(dāng)前區(qū)域性值確定。
(/)
日期分隔符丁频。在某些區(qū)域設(shè)置中杉允,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時分隔日席里、月和年叔磷。格式化輸出中用作日期分隔符的實際字符由您的應(yīng)用程序的當(dāng)前區(qū)域性確定。
(%)
用于表明不論尾隨什么字母奖磁,隨后字符都應(yīng)該以單字母格式讀取改基。也用于表明單字母格式應(yīng)以用戶定義格式讀取。有關(guān)更多詳細(xì)信息咖为,請參見下面的內(nèi)容秕狰。
d
將日顯示為不帶前導(dǎo)零的數(shù)字(如 1)。如果這是用戶定義的數(shù)字格式中的唯一字符躁染,請使用 %d鸣哀。
dd
將日顯示為帶前導(dǎo)零的數(shù)字(如 01)。
EEE
將日顯示為縮寫形式(例如 Sun)吞彤。
EEEE
將日顯示為全名(例如 Sunday)我衬。
M
將月份顯示為不帶前導(dǎo)零的數(shù)字(如一月表示為 1)叹放。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %M挠羔。
MM
將月份顯示為帶前導(dǎo)零的數(shù)字(例如 01/12/01)井仰。
MMM
將月份顯示為縮寫形式(例如 Jan)。
MMMM
將月份顯示為完整月份名(例如 January)破加。
gg
顯示時代/紀(jì)元字符串(例如 A.D.)
h
使用 12 小時制將小時顯示為不帶前導(dǎo)零的數(shù)字(例如 1:15:15 PM)俱恶。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %h拌喉。
hh
使用 12 小時制將小時顯示為帶前導(dǎo)零的數(shù)字(例如 01:15:15 PM)速那。
H
使用 24 小時制將小時顯示為不帶前導(dǎo)零的數(shù)字(例如 1:15:15)。如果這是用戶定義的數(shù)字格式中的唯一字符尿背,請使用 %H端仰。
HH
使用 24 小時制將小時顯示為帶前導(dǎo)零的數(shù)字(例如 01:15:15)。
m
將分鐘顯示為不帶前導(dǎo)零的數(shù)字(例如 12:1:15)田藐。如果這是用戶定義的數(shù)字格式中的唯一字符荔烧,請使用 %m。
mm
將分鐘顯示為帶前導(dǎo)零的數(shù)字(例如 12:01:15)汽久。
s
將秒顯示為不帶前導(dǎo)零的數(shù)字(例如 12:15:5)鹤竭。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %s景醇。
ss
將秒顯示為帶前導(dǎo)零的數(shù)字(例如 12:15:05)臀稚。
f
顯示秒的小數(shù)部分。例如三痰,ff 將精確顯示到百分之一秒吧寺,而 ffff 將精確顯示到萬分之一秒。用戶定義格式中最多可使用七個 f 符號散劫。如果這是用戶定義的數(shù)字格式中的唯一字符稚机,請使用 %f。
t
使用 12 小時制获搏,并對中午之前的任一小時顯示大寫的 A赖条,對中午到 11:59 P.M 之間的任一小時顯示大寫的 P。如果這是用戶定義的數(shù)字格式中的唯一字符常熙,請使用 %t纬乍。
tt
對于使用 12 小時制的區(qū)域設(shè)置,對中午之前任一小時顯示大寫的 AM症概,對中午到 11:59 P.M 之間的任一小時顯示大寫的 PM蕾额。
對于使用 24 小時制的區(qū)域設(shè)置,不顯示任何字符彼城。
y
將年份 (0-9) 顯示為不帶前導(dǎo)零的數(shù)字。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %y募壕。
yy
以帶前導(dǎo)零的兩位數(shù)字格式顯示年份(如果適用)调炬。
yyy
以四位數(shù)字格式顯示年份。
yyyy
以四位數(shù)字格式顯示年份舱馅。
z
顯示不帶前導(dǎo)零的時區(qū)偏移量(如 -8)缰泡。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %z代嗤。
zz
顯示帶前導(dǎo)零的時區(qū)偏移量(例如 -08)
zzz
顯示完整的時區(qū)偏移量(例如 -08:00)
格式顯示
M/d/yy
12/7/58
d-MMM
7-Dec
d-MMMM-yy
7-December-58
d MMMM
7 December
MMMM yy
December 58
hh:mm tt
08:50 PM
h:mm:ss t
8:50:35 P
H:mm
20:50
H:mm:ss
20:50:35
M/d/yyyy H:mm
12/7/1958 20:50
IOS NSDate日期操作總結(jié)
1 當(dāng)前時間創(chuàng)建NSDate
NSDate *myDate = [NSDate date];
NSLog(@"myDate = %@",myDate);
2 //從現(xiàn)在開始的24小時
NSTimeInterval secondsPerDay = 24*60*60;
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];
NSLog(@"myDate = %@",tomorrow);
3//根據(jù)已有日期創(chuàng)建日期
NSTimeInterval secondsPerDay1 = 24*60*60;
NSDate *now = [NSDate date];
NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1];
NSLog(@"yesterDay = %@",yesterDay);
4//比較日期
BOOL sameDate = [now isEqualToDate:yesterDay];
NSLog(@"sameDate = %lu",sameDate);
4.1//獲取較早的日期
NSDate *earlierDate = [yesterDay earlierDate:now];
NSLog(@"earlierDate = %@",earlierDate);
4.2//較晚的日期
NSDate *laterDate = [yesterDay laterDate:now];
NSLog(@"laterDate = %@",laterDate);
//兩個日期之間相隔多少秒
NSTimeInterval secondsBetweenDates= [yesterDay timeIntervalSinceDate:now];
NSLog(@"secondsBetweenDates= %lf",secondsBetweenDates);
//通過NSCALENDAR類來創(chuàng)建日期
NSDateComponents *comp = [[NSDateComponentsalloc]init];
[comp setMonth:06];
[comp setDay:01];
[comp setYear:2001];
NSCalendar *myCal = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *myDate1 = [myCal dateFromComponents:comp];
NSLog(@"myDate1 = %@",myDate1);
//從已有日期獲取日期
unsigned units = NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit;
NSDateComponents *comp1 = [myCal components:units fromDate:now];
NSInteger month = [comp1 month];
NSInteger year = [comp1 year];
NSInteger day = [comp1 day];
//NSDateFormatter實現(xiàn)日期的輸出
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
[formatter setDateStyle:NSDateFormatterFullStyle];//直接輸出的話是機器碼
//或者是手動設(shè)置樣式[formatter setDateFormat:@"yyyy-mm-dd"];
NSString *string = [formatter stringFromDate:now];
NSLog(@"string = %@",string);
NSLog(@"formater = %@",formatter);
//獲取日期格式對象
- (NSDateFormatter *)dateFormatter {
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
}
return dateFormatter;
}
NSDate與NSDateFormatter的相關(guān)用法
1.NSDateFormatter配合NSDate與NSString之間的轉(zhuǎn)化
NSDateFormatter有下面2個方法:
- (NSString *)stringFromDate:(NSDate *)date;//NSDate轉(zhuǎn)NSString
- (NSDate *)dateFromString:(NSString *)string;//NSString轉(zhuǎn)NSDate
e.g.
NSString *dateString=@"1900-01-01";
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date=[dateFormatter dateFromString:dateString];
[dateFormatter release];
NSString轉(zhuǎn)NSDate與上面類似
NSString *dateString=[dateFormatter dateFromString:[NSDate date]];
2.NSDateFormatter 的一些格式介紹
[dateFormatter setDateFormat:@"yyyy年MM月dd日#EEEE"]; // EEEE為星期幾棘钞,EEE為周幾
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setDateFormat:@"yyyy年MMMMd日"];//MMMM 為xx月,一個d可以省去01日前的0
3.NSString轉(zhuǎn)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];