NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *now; NSDateComponents *comps = [[NSDateComponents alloc] init]; NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; now=[NSDate date]; comps = [calendar components:unitFlags fromDate:now]; week = [comps weekday]; month = [comps month]; day = [comps day]; hour = [comps hour]; min = [comps minute]; sec = [comps second];
二、世界標准時間UTC /GMT 轉為當前系統時區對應的時間
- (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate { //設置源日期時區 NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@UTC];//或GMT //設置轉換後的目標日期時區 NSTimeZone* destinationTimeZone = [NSTimeZone localTimeZone]; //得到源日期與世界標准時間的偏移量 NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:anyDate]; //目標日期與本地時區的偏移量 NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:anyDate]; //得到時間偏移量的差值 NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; //轉為現在時間 NSDate* destinationDateNow = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:anyDate] autorelease]; return destinationDateNow; }
- (NSDate *)stringToDate:(NSString *)strdate { NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init]; [dateFormatter setDateFormat:@yyyy-MM-dd HH:mm:ss];// NSString的時間格式 NSDate *retdate = [dateFormatter dateFromString:strdate]; [dateFormatter release]; return retdate; }四、NSDate轉化為NSString
- (NSString *)dateToString:(NSDate *)date { NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init]; [dateFormatter setDateFormat:@yyyy-MM-dd HH:mm:ss]; NSString *strDate = [dateFormatter stringFromDate:date]; [dateFormatter release]; return strDate; }
//本地日期格式:2013-08-03 12:53:51 //可自行指定輸入輸出格式 -(NSString *)getUTCFormateLocalDate:(NSString *)localDate { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //輸入格式 [dateFormatter setDateFormat:@yyyy-MM-dd HH:mm:ss]; NSDate *dateFormatted = [dateFormatter dateFromString:localDate]; NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@UTC]; [dateFormatter setTimeZone:timeZone]; //輸出格式 [dateFormatter setDateFormat:@yyyy-MM-dd'T'HH:mm:ssZ]; NSString *dateString = [dateFormatter stringFromDate:dateFormatted]; [dateFormatter release]; return dateString; }
//輸入的UTC日期格式2013-08-03T04:53:51+0000 -(NSString *)getLocalDateFormateUTCDate:(NSString *)utcDate { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //輸入格式 [dateFormatter setDateFormat:@yyyy-MM-dd'T'HH:mm:ssZ]; NSTimeZone *localTimeZone = [NSTimeZone localTimeZone]; [dateFormatter setTimeZone:localTimeZone]; NSDate *dateFormatted = [dateFormatter dateFromString:utcDate]; //輸出格式 [dateFormatter setDateFormat:@yyyy-MM-dd HH:mm:ss]; NSString *dateString = [dateFormatter stringFromDate:dateFormatted]; [dateFormatter release]; return dateString; }
字符說明
(:)時間分隔符。在某些區域設置中,可以使用其他字符表示時間分隔符。時間分隔符在格式化時間值時分隔小時、分鐘和秒。格式化輸出中用作時間分隔符的實際字符由您的應用程序的當前區域性值確定。
(/)日期分隔符。在某些區域設置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時分隔日、月和年。格式化輸出中用作日期分隔符的實際字符由您的應用程序的當前區域性確定。
(%)用於表明不論尾隨什麼字母,隨後字符都應該以單字母格式讀取。也用於表明單字母格式應以用戶定義格式讀取。有關更多詳細信息,請參見下面的內容。
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