取目前時間的秒數
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
long long int date = (long long int)time;
NSLog(@”date\n%d”, date); //1295322949
//把秒數轉化成yyyy-MM-dd hh:mm:ss格式
NSDate *dd = [NSDate dateWithTimeIntervalSince1970:date];
NSLog(@”d:%@”,dd); //2011-01-18 03:55:49 +0000
//給一個時間秒數,取出對應的時間
NSString *s = @”1295355600000″; //對應21:00
NSDate *d = [NSDate dateWithTimeIntervalSince1970:[s doubleValue]/1000];
NSLog(@”dddd:%@”,d); //2011-01-18 13:00:00 +0000
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"HH:mm"];
NSString *showtimeNew = [formatter1 stringFromDate:d];
NSLog(@”showtimeNew:%@”,showtimeNew); //21:00 比d的時間 +8小時
[formatter1 release];
1. 建立或初始化可用以下方法
用于建立NSDate執行個體的類方法有
+ (id)date;
傳回目前時間
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
傳回以目前時間為基準,然後過了secs秒的時間
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
傳回以2001/01/01 GMT為基準,然後過了secs秒的時間
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
傳回以1970/01/01 GMT為基準,然後過了secs秒的時間
+ (id)distantFuture;
傳回很多年以後的未來的某一天。(比如你需要一個比現在(Now)晚(大)很長時間的時間值,則可以調用該方法。測試傳回了4000/12/31 16:00:00)
+ (id)distantPast;
傳回很多年以前的某一天。(比如你需要一個比現在(Now)早(小)大很長時間的時間值,則可以調用該方法。測試傳回了公元前0001/12/31 17:00:00)
用于建立NSDate執行個體的執行個體方法有
- (id)addTimeInterval:(NSTimeInterval)secs;
傳回以目前的執行個體中儲存的時間為基準,然後過了secs秒的時間
用于初始化NSDate執行個體的執行個體方法有
- (id)init;
初始化為目前時間。類似date方法
初始化為以2001/01/01 GMT為基準,然後過了secs秒的時間。類似dateWithTimeIntervalSinceReferenceDate:方法
- (id)initWithTimeInterval:(NSTimeInterval)secs sinceDate:(NSDate *)refDate;
初始化為以refDate為基準,然後過了secs秒的時間
- (id)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
初始化為以目前時間為基準,然後過了secs秒的時間
2. 日期之間比較可用以下方法
- (BOOL)isEqualToDate:(NSDate *)otherDate;
與otherDate比較,相同傳回YES
- (NSDate *)earlierDate:(NSDate *)anotherDate;
與anotherDate比較,傳回較早的那個日期
- (NSDate *)laterDate:(NSDate *)anotherDate;
與anotherDate比較,傳回較晚的那個日期
- (NSComparisonResult)compare:(NSDate *)other;
該方法用于排序時調用:
. 當執行個體儲存的日期值與anotherDate相同時傳回NSOrderedSame
. 當執行個體儲存的日期值晚于anotherDate時傳回NSOrderedDescending
. 當執行個體儲存的日期值早于anotherDate時傳回NSOrderedAscending
3. 取回時間間隔可用以下方法
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)refDate;
以refDate為基準時間,傳回執行個體儲存的時間與refDate的時間間隔
- (NSTimeInterval)timeIntervalSinceNow;
以目前時間(Now)為基準時間,傳回執行個體儲存的時間與目前時間(Now)的時間間隔
- (NSTimeInterval)timeIntervalSince1970;
以1970/01/01 GMT為基準時間,傳回執行個體儲存的時間與1970/01/01 GMT的時間間隔
- (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT為基準時間,傳回執行個體儲存的時間與2001/01/01 GMT的時間間隔
+ (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT為基準時間,傳回目前時間(Now)與2001/01/01 GMT的時間間隔
4. 将時間表示成字元串
- (NSString *)description;
以YYYY-MM-DD HH:MM:SS ±HHMM的格式表示時間。(其中 “±HHMM” 表示與GMT的存在多少小時多少分鐘的時區差異。比如,若時區設定在北京,則 “±HHMM” 顯示為 “+0800″)
使用NSDateFormatter轉換時間字元串時,預設的時區是系統時區,如我們使用一般都是中原標準時間(+8),
如果直接使用
[cpp] view plain copy print ?
- [dateFormatter dateFromString:@"2012-01-01 00:00:00"];
你會發現實際轉換為2011-12-31 16:00:00,少了8小時
是以我們要先指定時區為GMT再轉換,如下:
[cpp] view plain copy print ?
- static NSString *GLOBAL_TIMEFORMAT = @"yyyy-MM-dd HH:mm:ss";
- static NSString *GLOBAL_TIMEBASE = @"2012-01-01 00:00:00";
- NSTimeZone* localzone = [NSTimeZone localTimeZone];
- NSTimeZone* GTMzone = [NSTimeZone timeZoneForSecondsFromGMT:0];
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:GLOBAL_TIMEFORMAT];
- [dateFormatter setTimeZone:GTMzone];
- NSDate *bdate = [dateFormatter dateFromString:GLOBAL_TIMEBASE];
- NSDate *day = [NSDate dateWithTimeInterval:3600 sinceDate:bdate];
- [dateFormatter setTimeZone:localzone];
- NSLog(@"CurrentTime = %@", [dateFormatter stringFromDate:day]);
還可以如下:
[cpp] view plain copy print ?
- NSTimeZone* localzone = [NSTimeZone localTimeZone];
- NSTimeZone* GTMzone = [NSTimeZone timeZoneForSecondsFromGMT:0];
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:GLOBAL_TIMEFORMAT];
- [dateFormatter setTimeZone:GTMzone];
- NSDate *bdate = [dateFormatter dateFromString:GLOBAL_TIMEBASE];
- NSDate *day = [NSDate dateWithTimeInterval:(3600 + [localzone secondsFromGMT]) sinceDate:bdate];
- NSString *text = [dateFormatter stringFromDate:day];
UIDatePicker 是一個控制器類,封裝了 UIPickerView,但是他是UIControl的子類,專門用于接受日期、時間和持續時長的輸入。日期選取器的各列會按照指定的風格進行自動配置,這樣就讓開發者不必關心如何配置表盤這樣的底層操作。你也可以對其進行定制,令其使用任何範圍的日期。
UIDatePicker 依賴于 NSDate 類,這個類是cocoa 基礎的一員,以前用于桌面系統。本文中僅需用到 initWithString 來建立NSDate 是以NSDate 留待專題講解,你隻需要掌握本文中使用的方法就好。
[java] view plain copy print ?
- NSDate* _date = [ [ NSDate alloc] initWithString:@"2012-03-07 00:35:00 -0500"];
一、建立日期/時間選取器
UIDatePicker 使用起來比标準 UIPickerView 更簡單。他會根據你指定的日期範圍建立自己的資料源。使用它隻需要建立一個對象:
[java] view plain copy print ?
- UIDatePicker *datePicker = [ [ UIDatePicker alloc] initWithFrame:CGRectMake(0.0,0.0,0.0,0.0)];
預設情況下選取會顯示目前的日期和時間,并提供幾個表盤,分别顯示可以選擇的月份和日期、小時、分鐘、以及上午、下午。是以使用者預設可以選擇任何日期和時間的組合。
二、日期選取器模式
日期/時間選取器支援4種不同模式的選擇方式。通過設定 datePickerMode 屬性,可以定義選擇模式:
[java] view plain copy print ?
- datePicker.datePickerMode = UIDatePickerModeTime;
支援的模式:
[java] view plain copy print ?
- typedef enum {
- UIDatePickerModeTime, // Displays hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. 6 | 53 | PM)
- UIDatePickerModeDate, // Displays month, day, and year depending on the locale setting (e.g. November | 15 | 2007)
- UIDatePickerModeDateAndTime, // Displays date, hour, minute, and optionally AM/PM designation depending on the locale setting (e.g. Wed Nov 15 | 6 | 53 | PM)
- UIDatePickerModeCountDownTimer // Displays hour and minute (e.g. 1 | 53)
- } UIDatePickerMode;
三、時間間隔
你可以将分鐘表盤設定為以不同的時間間隔來顯示分鐘,前提是該間隔要能夠讓60整除。預設間隔是一分鐘。如果要使用不同的間隔,需要改變 minuteInterval屬性:
[java] view plain copy print ?
- datePicker.minuteInterval = 5;
四、日期範圍
你可以通過設定mininumDate 和 maxinumDate 屬性,來指定使用的日期範圍。如果使用者試圖滾動到超出這一範圍的日期,表盤會復原到最近的有效日期。兩個方法都需要NSDate 對象作參數:
[java] view plain copy print ?
- NSDate* minDate = [[NSDate alloc]initWithString:@"1900-01-01 00:00:00 -0500"];
- NSDate* maxDate = [[NSDate alloc]initWithString:@"2099-01-01 00:00:00 -0500"];
- datePicker.minimumDate = minDate;
- datePicker.maximumDate = maxDate;
如果兩個日期範圍屬性中任何一個未被設定,則預設行為将會允許使用者選擇過去或未來的任意日期。這在某些情況下很有用處,比如,當選擇生日時,可以是過去的任意日期,但終止與目前日期。如果你希望設定預設顯示的日期,可以使用date屬性: [java] view plain copy print ?
- datePicker.date = minDate;
此外,你還可以用 setDate 方法。如果選擇了使用動畫,則表盤會滾動到你指定的日期: [java] view plain copy print ?
- [ datePicker setDate:maxDate animated:YES];
五、顯示日期選擇器
[java] view plain copy print ?
- [ self.view addSubview:datePicker];
需要注意的是,選取器的高度始終是216像素,要确定配置設定了足夠的空間來容納。
六、讀取日期
[java] view plain copy print ?
- NSDate* _date = datePicker.date;
由于日期選擇器是 UIControl的子類 (與UIPickerView不同),你還可以在UIControl類的通知結構中挂接一個委托: [java] view plain copy print ?
- [ datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged ];
隻要使用者選擇了一個新日期,你的動作類就會被調用: [java] view plain copy print ?
- -(void)dateChanged:(id)sender{
- UIDatepicker* control = (UIDatePicker*)sender;
- NSDate* _date = control.date;
- }
是不是覺得很好玩呢?确實。如果覺得好玩,你也試着封裝一個UIPickerView 試試看,打造一個你自己的專用滾輪。