在iOS開發中,NSDate的使用場景很多,例如,聊天程序裡的時間顯示(幾分鐘前、幾小時前、幾天前)的計算;網絡請求中的時間戳(計算當前時間距離1970年1?1?的秒數)。
NSDate是Cocoa中用於處理日期和時間的基礎類,封裝了某?給定的時刻(含日期、時間、時區)。使用+date方法獲取當前時間。例如:NSDate *nowDate = [NSDate date];
注意NSLog(@“%@”, nowDate);
?論你是哪個時區的時間,打印的總是0時區時間。
NSTimeInterval(double類型),用來表?以秒為單位的時間間隔。可以使用-initWithTimeIntervalSinceNow:
方法傳入?個NSTimeInterval參數,創建一個NSDate對象。
例如:NSDate *tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow: 24 * 60 * 60];
NSDate *yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow: -1 * 24 * 60 * 60];
取兩個時間對象的間隔:NSTimeinterval = [tomorrowDate timeIntervalSinceDate: yesterdayDate];
具體實現代碼如下:
#pragma mark ** NSDate 日期類
NSDate *date = [NSDate date]; /* 0時區的時間 */
NSLog(@%@, date);
/* 0時區的時間 + 秒數 = 當前時區的時間 */
/* 獲取當前的時區 */
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSLog(@%@, zone);
NSTimeZone *zone2 = [NSTimeZone localTimeZone];
NSLog(@%@, zone2);
/* 獲取和0時區相差的秒數 */
NSInteger seconds = [zone secondsFromGMTForDate:date];
/* 當前時間 */
NSDate *localDate = [NSDate dateWithTimeIntervalSinceNow:seconds];
NSLog(@localDate: %@, localDate);
NSDate *local2 = [NSDate dateWithTimeIntervalSinceNow:8 * 3600];
NSLog(@local2: %@, local2);
/* 明天時間 */
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:8 * 3600 + 24 * 3600];
NSLog(@tomorrow: %@, tomorrow);
/* 昨天時間 */
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:8 * 3600 - 24 * 3600];
NSLog(@yesterday: %@, yesterday);
#pragma mark ** NSTimeInterval 時間間隔類
NSTimeInterval timeInterval = [tomorrow timeIntervalSinceDate:yesterday];
NSLog(@timeInterval: %lf, timeInterval);
NSTimeInterval timeInterval2 = [localDate timeIntervalSince1970];
NSLog(@timeInterval2: %lf, timeInterval2);
/* 快速獲取當前時區的時間 */
NSDate *dateLocal = [NSDate dateWithTimeIntervalSinceNow:[NSTimeZone localTimeZone].secondsFromGMT];
NSLog(@dateLocal: %@, dateLocal);
NSDateFormatter是iOS中的日期格式類,功能是實現NSString和NSDate的互轉。常見的時間格式化字符串有:y 年、M 月份、d 天、H 小時(24小時制)、h(12小時制)、am | pm 上午| 下午、m 分鐘、s 秒數等。指定的日期格式:NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@yyyy-MM-dd HH:mm:ss];
日期轉化為字符串:
NSDateFormatter*formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@yyyy-MM-dd hh:mm:ss];
NSString *dateString = [formatter stringFromDate: [NSDate date]];
時間字符串轉化為相對應的?期:
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@yyyy-MM-dd HH:mm:ss];
NSString *dateStr = @”2008-08-08 20:08:08”;
NSDate *date = [formatter dateFromString:dateStr];
具體實現代碼如下:
#pragma mark ** NSDateFormatter
/* y 年
* M 月
* d 日
* h 小時(12), H(24)
* m 分
* s 秒
* a 顯示上下午
* z 時區
* eee 星期
* G 公元
*/
/* NSDate 轉 字符串 */
/* 方法1, 字符串format方法 */
NSString *string1 = [NSString stringWithFormat:@%@, dateLocal];
NSLog(@string1: %@, string1);
/* 方法2, NSDateFormatter格式 */
/* 步驟: 1. 新建一個格式
* 2. 按照格式進行轉換
*/
NSDateFormatter *format1 = [[NSDateFormatter alloc] init];
[format1 setAMSymbol:@AM];
[format1 setPMSymbol:@PM];
[format1 setDateFormat:@yyyy年MM月dd日 HH:mm:ss];
NSString *string2 = [format1 stringFromDate:date];
NSLog(@string2: %@, string2);
/* NSDateFormat 自動轉換為當前系統時區 */
/* 字符串 轉 NSDate */
NSString *string3 = @2015-04-16 19:44:16;
NSDate *date11 = [format1 dateFromString:string3];
NSLog(@date11: %@, date11);
/* 練習: 定義一個NSDateFormatter, 設置合適的格式
* 將字符串@“2014年05?01日 10點23分18秒”轉換為NSDate對象。
*/
NSDateFormatter *exFormat = [[NSDateFormatter alloc] init];
[exFormat setDateFormat:@yyyy年MM月dd日 HH點mm分ss秒];
NSString *timeStr = @2014年05月01日 10點23分18秒;
NSDate *dateStr = [[exFormat dateFromString:timeStr] dateByAddingTimeInterval:[NSTimeZone localTimeZone].secondsFromGMT];
NSLog(@timeStrDate: %@, dateStr);