在開發iOS程序時,有時候需要將時間格式調整成自己希望的格式,這個時候我們可以用NSDateFormatter類來處理。
例如:
//實例化一個NSDateFormatter對象 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //設定時間格式,這里可以設置成自己需要的格式 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //用[NSDate date]可以獲取系統當前時間 NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]]; //輸出格式為:2010-10-27 10:22:13 NSLog(@"%@",currentDateStr); //alloc后對不使用的對象別忘了release [dateFormatter release];
?
字符說明
(:)
時間分隔符。在某些區域設置中,可以使用其他字符表示時間分隔符。時間分隔符在格式化時間值時分隔小時、分鐘和秒。格式化輸出中用作時間分隔符的實際字符由您的應用程序的當前區域性值確定。
(/)
日期分隔符。在某些區域設置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時分隔日、月和年。格式化輸出中用作日期分隔符的實際字符由您的應用程序的當前區域性確定。
(%)
用于表明不論尾隨什么字母,隨后字符都應該以單字母格式讀取。也用于表明單字母格式應以用戶定義格式讀取。有關更多詳細信息,請參見下面的內容。
d
將日顯示為不帶前導零的數字(如 1)。如果這是用戶定義的數字格式中的唯一字符,請使用 %d。
dd
將日顯示為帶前導零的數字(如 01)。
EEE
將日顯示為縮寫形式(例如 Sun)。
EEEE
將日顯示為全名(例如 Sunday)。
M
將月份顯示為不帶前導零的數字(如一月表示為 1)。如果這是用戶定義的數字格式中的唯一字符,請使用 %M。
MM
將月份顯示為帶前導零的數字(例如 01/12/01)。
MMM
將月份顯示為縮寫形式(例如 Jan)。
MMMM
將月份顯示為完整月份名(例如 January)。
gg
顯示時代/紀元字符串(例如 A.D.)
h
使用 12 小時制將小時顯示為不帶前導零的數字(例如 1:15:15 PM)。如果這是用戶定義的數字格式中的唯一字符,請使用 %h。
hh
使用 12 小時制將小時顯示為帶前導零的數字(例如 01:15:15 PM)。
H
使用 24 小時制將小時顯示為不帶前導零的數字(例如 1:15:15)。如果這是用戶定義的數字格式中的唯一字符,請使用 %H。
HH
使用 24 小時制將小時顯示為帶前導零的數字(例如 01:15:15)。
m
將分鐘顯示為不帶前導零的數字(例如 12:1:15)。如果這是用戶定義的數字格式中的唯一字符,請使用 %m。
mm
將分鐘顯示為帶前導零的數字(例如 12:01:15)。
s
將秒顯示為不帶前導零的數字(例如 12:15:5)。如果這是用戶定義的數字格式中的唯一字符,請使用 %s。
ss
將秒顯示為帶前導零的數字(例如 12:15:05)。
f
顯示秒的小數部分。例如,ff 將精確顯示到百分之一秒,而 ffff 將精確顯示到萬分之一秒。用戶定義格式中最多可使用七個 f 符號。如果這是用戶定義的數字格式中的唯一字符,請使用 %f。
t
使用 12 小時制,并對中午之前的任一小時顯示大寫的 A,對中午到 11:59 P.M 之間的任一小時顯示大寫的 P。如果這是用戶定義的數字格式中的唯一字符,請使用 %t。
tt
對于使用 12 小時制的區域設置,對中午之前任一小時顯示大寫的 AM,對中午到 11:59 P.M 之間的任一小時顯示大寫的 PM。
對于使用 24 小時制的區域設置,不顯示任何字符。
y
將年份 (0-9) 顯示為不帶前導零的數字。如果這是用戶定義的數字格式中的唯一字符,請使用 %y。
yy
以帶前導零的兩位數字格式顯示年份(如果適用)。
yyy
以四位數字格式顯示年份。
yyyy
以四位數字格式顯示年份。
z
顯示不帶前導零的時區偏移量(如 -8)。如果這是用戶定義的數字格式中的唯一字符,請使用 %z。
zz
顯示帶前導零的時區偏移量(例如 -08)
zzz
顯示完整的時區偏移量(例如 -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日期操作總結
1?//?當前時間創建NSDate
? ? ? ??NSDate?*myDate = [NSDate?date];
? ? ? ??NSLog(@"myDate = %@",myDate);
2?//從現在開始的24小時
? ? ? ??NSTimeInterval?secondsPerDay =?24*60*60;
? ? ? ??NSDate?*tomorrow = [NSDate?dateWithTimeIntervalSinceNow:secondsPerDay];
? ? ? ??NSLog(@"myDate = %@",tomorrow);
3//根據已有日期創建日期
?? ? ? ??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類來創建日期
? ? ? ??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實現日期的輸出
? ? ? ??NSDateFormatter?*formatter = [[NSDateFormatteralloc]init];
? ? ? ? [formatter?setDateStyle:NSDateFormatterFullStyle];//直接輸出的話是機器碼
? ? ? ??//或者是手動設置樣式[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的相關用法
?
1.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];
?[dateFormatter release];
?NSString轉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轉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];