2013-03-18 34 views
0

這是我使用的日期變更甲爲什麼日期改變時,我試圖改變合成?

 NSLog(@"newBirthDates%@",_newwBirthDates); 
    NSDateFormatter *Form = [[NSDateFormatter alloc] init]; 
    [Form setDateFormat:@"MM/dd"]; 
    NSDate *date1 =[NSDate date]; 
    NSString *string =[Form stringFromDate:date1]; 
    NSLog(@"string%@",string); 
    NSDate *todaydate =[Form dateFromString:string]; 
    NSLog(@"todaydate%@",todaydate); 

這是我得到的輸出代碼

 newBirthDates(
    "05/22", 
    "07/11", 
    "10/07", 
    "02/20" 
) 
newBirthDates(
    "05/22", 
    "07/11", 
    "10/07", 
    "02/20" 
) 
string03/18 
todaydate1970-03-17 18:30:00 +0000 

現在我的問題是,爲什麼3/18成爲3月17日?爲什麼有一天會減少

+1

一個技巧:始終保存在可變/數據庫完整的日期,只有甲酸鹽他們表示,當用戶界面,在你的特定情況下,這可能是因爲你沒有在日期字符串中保存/獲取年份。 – 2013-03-18 13:02:03

+0

只添加了一個可能的重複項,但使用'NSLog'檢查日期是否正確的問題已經被回答了很多次。 – Sulthan 2013-03-18 13:03:49

回答

3

答案很簡單 - 時區。 採取什麼NSLog打印仔細看出來
1970-03-17 18:30:00+0000

默認情況下,NSDateFormatter設置爲本地時區。這意味着,如果您的時區爲+5:30,那麼給它一個日期「1970/18/3」結果1970-03-18 00:00:00+0530。 但是,NSLog總是在GMT(零)時區打印日期,添加/減去時區差異(5小時30分鐘)。

基本上,沒有什麼可以解決的,你只需要瞭解如何使用NSLog來檢查NSDate的值。

+0

這個人是誰?哈哈哈謝謝你,但是什麼是解決方案?我們現在知道nslog如何工作,但如何解決這個問題?我只在數組中添加單日期,這是今天,然後在計算機中,我設置日期爲03/17 11.59下午,是的,如果代碼庫日期條件不一樣明顯,他們不會是相同現在用戶正在與應用程序睡覺關閉,然後輪到12日上午意味着18日,爲什麼我不收到通知? – user1660882 2013-03-18 13:23:27

+0

對不起,你我開始談論一些其他的事情而忽略它 – user1660882 2013-03-18 13:25:38

1

您的日誌按字符串值顯示,消除了所有重要的時區差異。

NSDate的日誌顯示了GMT之前的時間。

而且這兩個值都是正確的。

的NSDate,timeIntervalSinceReferenceDate的唯一原始的方法, 提供在的NSDate界面中的所有其他方法的基礎。 此方法返回一個相對於絕對參考日期的時間值 日期 - 格林威治標準時間2001年1月1日的第一個時刻。

您必須閱讀NSDate Documentation

1

用於獲取正確的日期,你可以使用這一個,

NSDateFormatter *Form = [[NSDateFormatter alloc] init]; 
    [Form setDateFormat:@"MM/dd"]; 
    [Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    NSDate *date1 =[NSDate date]; 
    NSString *string =[Form stringFromDate:date1]; 
    NSLog(@"string%@",string); 
    NSDate *todaydate =[Form dateFromString:string]; 
    NSLog(@"todaydate%@",todaydate); 

上面的代碼會給出正確的日期。

1

主要的是時區[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

這是正確的代碼:

NSDateFormatter *Form = [[NSDateFormatter alloc] init]; 
[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
[Form setDateFormat:@"MM/dd"]; 
NSDate *date =[NSDate date]; 
NSString *string =[Form stringFromDate:date]; 
NSDate *todaydate = [Form dateFromString:string]; 
NSLog(@"todaydate %@",todaydate); 
相關問題