IOS開發(fā)---格式化日期時(shí)間

在開發(fā)iOS程序時(shí),有時(shí)候需要將時(shí)間格式調(diào)整成自己希望的格式,這個(gè)時(shí)候我們可以用NSDateFormatter類來處理。

例如:
//實(shí)例化一個(gè)NSDateFormatter對(duì)象

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

//設(shè)定時(shí)間格式,這里可以設(shè)置成自己需要的格式

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

//用[NSDate date]可以獲取系統(tǒng)當(dāng)前時(shí)間

NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];

//輸出格式為:2010-10-27 10:22:13NSLog(@"%@",currentDateStr);
//alloc后對(duì)不使用的對(duì)象別忘了

release[dateFormatter release];
字符說明(:)

(:)

時(shí)間分隔符。在某些區(qū)域設(shè)置中,可以使用其他字符表示時(shí)間分隔符。時(shí)間分隔符在格式化時(shí)間值時(shí)分隔小時(shí)、分鐘和秒。格式化輸出中用作時(shí)間分隔符的實(shí)際字符由您的應(yīng)用程序的當(dāng)前區(qū)域性值確定。

(/)

日期分隔符。在某些區(qū)域設(shè)置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時(shí)分隔日、月和年。格式化輸出中用作日期分隔符的實(shí)際字符由您的應(yīng)用程序的當(dāng)前區(qū)域性確定。

(%)

用于表明不論尾隨什么字母,隨后字符都應(yīng)該以單字母格式讀取。也用于表明單字母格式應(yīng)以用戶定義格式讀取。有關(guān)更多詳細(xì)信息,請(qǐng)參見下面的內(nèi)容。

d

將日顯示為不帶前導(dǎo)零的數(shù)字(如 1)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %d。

dd

將日顯示為帶前導(dǎo)零的數(shù)字(如 01)。

EEE

將日顯示為縮寫形式(例如 Sun)。

EEEE

將日顯示為全名(例如 Sunday)。

M

將月份顯示為不帶前導(dǎo)零的數(shù)字(如一月表示為 1)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %M。

MM

將月份顯示為帶前導(dǎo)零的數(shù)字(例如 01/12/01)。

MMM

將月份顯示為縮寫形式(例如 Jan)。

MMMM

將月份顯示為完整月份名(例如 January)。

gg

顯示時(shí)代/紀(jì)元字符串(例如 A.D.)

h

使用 12 小時(shí)制將小時(shí)顯示為不帶前導(dǎo)零的數(shù)字(例如 1:15:15 PM)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %h。

hh

使用 12 小時(shí)制將小時(shí)顯示為帶前導(dǎo)零的數(shù)字(例如 01:15:15 PM)。

H

使用 24 小時(shí)制將小時(shí)顯示為不帶前導(dǎo)零的數(shù)字(例如 1:15:15)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %H。

HH

使用 24 小時(shí)制將小時(shí)顯示為帶前導(dǎo)零的數(shù)字(例如 01:15:15)。

m

將分鐘顯示為不帶前導(dǎo)零的數(shù)字(例如 12:1:15)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %m。

mm

將分鐘顯示為帶前導(dǎo)零的數(shù)字(例如 12:01:15)。

s

將秒顯示為不帶前導(dǎo)零的數(shù)字(例如 12:15:5)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %s。 > ss
將秒顯示為帶前導(dǎo)零的數(shù)字(例如 12:15:05)。

f

顯示秒的小數(shù)部分。例如,ff 將精確顯示到百分之一秒,而 ffff 將精確顯示到萬分之一秒。用戶定義格式中最多可使用七個(gè) f 符號(hào)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %f。

t

使用 12 小時(shí)制,并對(duì)中午之前的任一小時(shí)顯示大寫的 A,對(duì)中午到 11:59 P.M 之間的任一小時(shí)顯示大寫的 P。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %t。

tt

對(duì)于使用 12 小時(shí)制的區(qū)域設(shè)置,對(duì)中午之前任一小時(shí)顯示大寫的 AM,對(duì)中午到 11:59 P.M 之間的任一小時(shí)顯示大寫的 PM。
對(duì)于使用 24 小時(shí)制的區(qū)域設(shè)置,不顯示任何字符。

y

將年份 (0-9) 顯示為不帶前導(dǎo)零的數(shù)字。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %y。

yy

以帶前導(dǎo)零的兩位數(shù)字格式顯示年份(如果適用)。

yyy

以四位數(shù)字格式顯示年份。

yyyy

以四位數(shù)字格式顯示年份。

z

顯示不帶前導(dǎo)零的時(shí)區(qū)偏移量(如 -8)。如果這是用戶定義的數(shù)字格式中的唯一字符,請(qǐng)使用 %z。

zz

顯示帶前導(dǎo)零的時(shí)區(qū)偏移量(例如 -08)

zzz

顯示完整的時(shí)區(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)前時(shí)間創(chuàng)建NSDate
        NSDate *myDate = [NSDate date];
        NSLog(@"myDate = %@",myDate);
2 //從現(xiàn)在開始的24小時(shí)
        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);
 
        //兩個(gè)日期之間相隔多少秒
        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實(shí)現(xiàn)日期的輸出
        NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
        [formatter setDateStyle:NSDateFormatterFullStyle];//直接輸出的話是機(jī)器碼
        //或者是手動(dòng)設(shè)置樣式[formatter setDateFormat:@"yyyy-mm-dd"];
        NSString *string = [formatter stringFromDate:now];
        NSLog(@"string = %@",string);
        NSLog(@"formater = %@",formatter);
 

//獲取日期格式對(duì)象

- (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個(gè)方法:
 - (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月,一個(gè)d可以省去01日前的03.NSString轉(zhuǎn)NSDate少一天的解決辦法 用下面這種格式化方式
1.[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];   
2. NSCalendar *calendar = [NSCalendar currentCalendar];  
   NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
   NSDate *todayDate = [calendar dateFromComponents:components];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容