我使用的UIDatePicker當我採取選擇與日期:的UIDatePicker我的應用程序返回錯誤的NSDate
NSDate *date = picker.date;
picker.date
返回的一天,我選擇了日期之前。
任何想法爲什麼會發生?
我使用的UIDatePicker當我採取選擇與日期:的UIDatePicker我的應用程序返回錯誤的NSDate
NSDate *date = picker.date;
picker.date
返回的一天,我選擇了日期之前。
任何想法爲什麼會發生?
UIDatePicker
將在您的本地時區顯示日期和時間。但是,NSDate
沒有任何時區的概念,因爲它存儲自參考日期以來的絕對秒數。當NSLogging
是日期時,它以GMT顯示日期和時間。我期望如果你計算出與GMT的本地時區差異,你會發現它是正確的日期。
嘗試使用適當的語言環境創建NSDateFormatter或NSCalendar,並通過該日期傳遞日期。
有關此常見主題的更多解讀,請參閱this site written by another SO contributor。
你檢查了時區嗎?
當您打印一個NSDate
它將使用GMT作爲它的時區。
如果設置系統時區的NSDateFormatter你可能會得到一個其他日期,因爲這將需要的時區,並相應計算時間。
添加該代碼,看看輸出是否正確:
NSDate *date = picker.date;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeZone:NSDateFormatterNoStyle];
[dateFormatter setLocale:[NSLocale currentLocale]];
NSLog(@"Date: %@", [dateFormmater stringFromDate:date]);
[dateFormatter release], dateFormatter = nil;
試試這個工作對我來說
NSDate* sourceDate = [NSDate date];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease];
//我在標籤輸出礦山你可以使用任何你喜歡
NSString *dateOutput = [[[NSString alloc] initWithFormat:@"%@", destinationDate]autorelease];
self.dateLabel.text = dateOutput;
記住創建的NSDate然後輸出它帶有有效的時區和日曆!
的NSDate僅代表時間的絕對點。它沒有時區(紐約,巴塞羅那,...)或日曆(格里高利,希伯來,...)的概念。
的UIDatePicker返回默認情況下的NSDate與系統NSCalendar和NSTimeZone,但是當你嘗試以後打印出來,你不格式化輸出。你可能會有不匹配的地方。
因此,您需要正確設置UIDatePicker,然後使用NSDateFormatter轉換輸出,以便它知道日曆和正在使用的時區。
用的UIDatePicker的初始化的示例代碼,然後打印結果:
- (void)viewDidLoad
{
[super viewDidLoad];
// init the UIDatePicker with your values
// by default UIDatePicker inits with today, system calendar and timezone
// Only for teaching purposes I will init with default values
NSDate * now = [[NSDate alloc] init];
[_datePicker setDate: now]
animated: YES];
_datePicker.timeZone = [NSTimeZone localTimeZone];
_datePicker.calendar = [NSCalendar currentCalendar];
[_datePicker addTarget: self
action: @selector(getDatePickerSelection:)
forControlEvents:UIControlEventValueChanged];
}
-(void)getDatePickerSelection:(id) sender
{
// NSDateFormatter automatically inits with system calendar and timezone
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// Setup an output style
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
// Medium style date, short style time => "Nov 23, 1937 3:30pm"
NSString *dateString = [dateFormatter stringFromDate:date];
}
檢查答案我做了另一個非常類似的問題:
只需添加一行代碼
self.datePicker.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
0是GMT 00。根據您的時區添加。
是否使用了UIImagePicker(如你的問題),或者一個的UIDatePicker(如你的問題標題)?你是否以任何方式定製日期選擇器? –
我的錯,我使用的UIDatePicker – MTA