2014-03-04 59 views
-1

所以,我試圖爲日出和日落創建一個NSDate對象。我得到的日期是基於NSDatePicker,我從地圖獲取座標,並從地圖獲取GPS的時區。NSDate和NSDateformatter錯誤的輸出

我用這個代碼來獲取NSDate對象:https://github.com/MosheBerman/KosherCocoa-legacy 這一次得到的座標:https://github.com/digdog/MapKitDragAndDrop 而這一次,以獲得基於座標時區:https://github.com/Alterplay/APTimeZones

現在我的物理位置在洛杉磯,我用來測試的日出和日落在丹麥回家了。

-(NSString *)sunriseDate{ 
    //Create the GeoLocation based on 'latitude' and 'longitude' (getting the from MapKitDragAndDrop) and 'location.timeZone' (getting that from APTimeZones). 
    GeoLocation *position = [[GeoLocation alloc] initWithName:@"position" andLatitude:latitude andLongitude:longitude andTimeZone:location.timeZone]; 

    AstronomicalCalendar *astronomicalCalender = [[AstronomicalCalendar alloc] initWithLocation:position]; 

    //daysBetween is the value from NSDatePicker 
    astronomicalCalender.workingDate = [NSDate dateWithTimeIntervalSinceNow:kSecondsInADay*[self daysBetween]]; 

    NSDate *sunriseDate = [astronomicalCalender sunrise]; 
    NSLog(@"Sunrise time: %@", sunriseDate); 
    //This spits out: Sunrise time: 2014-03-05 06:09:53 AM +0000 which is the right time. 
    NSDateFormatter *sunriseTime = [[NSDateFormatter alloc] init]; 
    [sunriseTime setDateFormat:@"HH:mm:ss"]; 

    NSString *sunriseString = [sunriseTime stringFromDate:sunriseDate]; 
    NSLog(@"Sunrisestring: %@", sunriseString); 
    //This spits out: 10:09:53 PM. 
    return sunriseString; 

} 

爲什麼會發生這種情況,誰能給我一個解決方案呢?

回答

1

[sunriseTime setDateFormat:@"yyyy-MM-dd hh:mm:ss a EEEE"];

,而不是爲了任何人誰可能會再次陷入同樣的​​事情。

我在github上發現了一個庫https://github.com/Alterplay/APTimeZones,它幫助我根據座標確定時區。

然後我用

[sunriseTime setTimeZone:location.timeZone]; 

這引出正確的時間時區。

希望這有助於任何人!

0

您需要正確匹配輸入格式。

您可能只對時間感興趣,但NSDateFormatter並不在意。 NSDate從來就不是一個時間。這是一個時間點,也包括日期。沒有日期和時間部分,它不起作用。

此外,這可能是Stack Overflow上最常見的問題之一。任何其他NSDate到NSString(反之亦然)的問題將回答這個問題。

你的日期格式應該是...

@"YYYY-MM-dd hh:mm:ss a EEEE" 

我相信。反正就是這樣。

+0

我找不到任何東西,並相信我,我一直在尋找。我無法從這個答案中得到任何東西。除了如何顯示和/或iPhone的時區是什麼。如果您可能可以指向我自從我自己的搜索以來正在討論的任何線程的方向有很短的時間.. (EEE是白天,zzzz是時區) – 4FunAndProfit

0

這吐出來了:10:09:53 PM。這是您的時區正確的當地時間,與格林尼治時間相差8小時日出時間:2014年03月05日06:09:53上午+0000。就這樣。你有一個德國人醒來的晚上。

+0

確切的,但我需要吐出它的時間爲尊重時區。 – 4FunAndProfit

0

您可以嘗試使用這樣的:[sunriseTime setDateFormat:@"HH:mm:ss"];

+0

我試過了。這隻返回時區ekstra,它不會改變輸出以匹配座標的正確時間,''hh:mm:ss''部分打印完全一樣的東西。 – 4FunAndProfit