2014-07-07 22 views
0

我想試着去創造的NSDate的對象這樣混淆的NSDate

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    // [gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
    NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSMinuteCalendarUnit)fromDate:[NSDate date]]; 
    NSInteger day = [weekdayComponents day]; 
    NSInteger month = [weekdayComponents month]; 
    NSInteger year = [weekdayComponents year]; 


    NSDateComponents *timeZoneComps=[[NSDateComponents alloc] init]; 
    [timeZoneComps setDay:day]; 
    [timeZoneComps setMonth:month]; 
    [timeZoneComps setYear:year]; 
    [timeZoneComps setHour:00]; 
    [timeZoneComps setMinute:00]; 
    [timeZoneComps setSecond:01]; 

    m_currentDate   = [gregorian dateFromComponents:timeZoneComps]; 

當我登錄了的currentdate,我得到這個

"2014-07-07 06:00:01 +0000" 

如果我保存這plist中我得到這個

07-Jul-2014 11:30:01 am 

如果我使用 「UTC」 作爲時區

我把它作爲

"2014-07-07 00:00:01 +0000" 

和裏面的plist它顯示爲

07-Jul-2014 5:30:01 am 

我不理解正在發生的事情,任何人可以幫助我這個

我想知道,如果我不設置任何時間區將使用什麼時間區?

我們是否需要將UTC明確設置爲timeZone或需要使用systemTimeZone。

+0

你想要的時區取決於,錯誤,你想要什麼時區。日期/時間代表什麼? – trojanfoe

+0

對不起,我沒有得到你的問題,你需要什麼信息? – Ranjit

+0

你是什麼意思「保存到plist」?你怎麼保存它? – Fogmeister

回答

1

你需要認識到大約NSDate的事情是,有沒有這樣的事情日,周,月,年,時區等..

一個NSDate純粹是一個時間點。它沒有關於它是什麼時區等信息...

有效地,它只是一個數字。如果有幫助,你可以把它想象成使用UTC。

,讓你喜歡的時區的東西中的類NSCalendarNSDateFormatter等..

我猜你在UTC + 6的時區是?這就是爲什麼當你用00:00:01創建一個日期並且你註銷它時,它顯示爲06:00:01。

這與NSDate無關。你在控制檯中看到的是一個字符串。它是使用默認時區(您自己的)的日期對象的表示形式。

我不得不看你保存到plist的代碼,但我懷疑這是同樣的問題。你正在節省一些東西,假設它正在使用一個特定的時區,但事實上並非如此。

+1

您還需要提及使用'[NSDate description]'而不是'NSDateFormatter'記錄'NSDate'對象之間的經典區別。 – trojanfoe

+0

在這裏我創建了時間爲00:00:01的日期,它顯示了我6:00:01,但是如果我使用UTC時區創建日期,那麼它爲什麼會顯示00:00:01,因爲UTC時間將是我的時區後面5:30小時 – Ranjit

+0

你好,當我們從字符串中得到一個日期時,它們是否與它有關聯 – Ranjit