2011-08-29 71 views
0

在我的應用程序中,我使用NSTimer並使用initWithFireDate。 我想從現在起一個小時後開啓計時器。 「現在」意味着當地時區。 當我試圖獲得添加一小時,並試圖打印它,它打印的時間格林威治標準時間,而不是根據我的時區。 我該如何解決這個錯誤? 根據當地時區的不同,我希望從現在起1小時後可以獲得NSDate。iPhone - NSTimer - initWithFireDate並傳遞當地時間

回答

0

獲得時間後,找到時區並相應地添加時差。

0

你可以用NSDateFormatter採取不同格式的日期字符串。試試看,你會得到你想要的答案。

+0

你做任何事NSDateFormatter並把它放回NSDate,它不會工作。 – Satyam

1

NSDateFormatter * formater = [[NSDateFormatter alloc] init]; formater.timeZone = [NSTimeZone localTimeZone]; 將其用於本地化您的時區。

+0

你對NSDateFormatter做任何事情,並把它放回到NSDate,它不會工作。 – Satyam

+0

它可行,因爲你寫在你的問題你想按照你當地的時區時間。如果你在設備中使用它。 – Ron

2

此代碼將幫助您獲得本地時間,你可以把它從那裏據此前鋒:

- (NSDate *)currentLocalTime { 
     NSDate *aTriggerDate = [NSDate date]; 

    NSTimeZone *aSourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    NSTimeZone *aTriggerTimeZone = [NSTimeZone systemTimeZone]; 

    NSInteger aSourceGMTOffset = [aSourceTimeZone secondsFromGMTForDate:aTriggerDate]; 
    NSInteger aTriggerGMTOffset = [aTriggerTimeZone secondsFromGMTForDate:aTriggerDate]; 
    NSTimeInterval anInterval = aTriggerGMTOffset - aSourceGMTOffset; 

    NSDate *aFinalDate = [[NSDate alloc] initWithTimeInterval:anInterval sinceDate:aTriggerDate]; 

    return aFinalDate; 
} 
0

這是我的比凱勒姆吉特·辛格在斯威夫特代碼版本(僅通過使用「UTC」爲我工作作爲縮寫)。希望它能幫助:

func testTimeZone(){ 

    let currentLocalTime = NSDate() 

    let sourceTimeZone = NSTimeZone(abbreviation: "UTC") 
    let triggerTimeZone = NSTimeZone.systemTimeZone() 

    let sourceGTMOffset = sourceTimeZone?.secondsFromGMTForDate(currentLocalTime) 
    let triggerGTMOffset = triggerTimeZone.secondsFromGMTForDate(currentLocalTime) 

    let interval = triggerGTMOffset - sourceGTMOffset! 

    let finalDate = NSDate(timeInterval: NSTimeInterval.init(interval), sinceDate: currentLocalTime) 

    Swift.print("Current local time: \(currentLocalTime)") 
    Swift.print("Source Time Zone (GTM): \(sourceTimeZone)") 
    Swift.print("Trigger Time Zone (System Time Zone): \(triggerTimeZone)") 
    Swift.print("Source GTM Offset: \(sourceGTMOffset)") 
    Swift.print("Trigger GTM Offset: \(triggerGTMOffset)") 
    Swift.print("Interval (Source - Trigger Offsets): \(interval)") 
    Swift.print("Final Date (Current + interval): \(finalDate)") 


} 

UPDATE

我居然發現了一個更短的方式來獲得的日期,這樣一來爲我更好地工作:

var currentDate: NSDate { 
    let currentLocalTime = NSDate() 

    let localTimeZone = NSTimeZone.systemTimeZone() 
    let secondsFromGTM = NSTimeInterval.init(localTimeZone.secondsFromGMT) 
    let resultDate = NSDate(timeInterval: secondsFromGTM, sinceDate: currentLocalTime) 

    return resultDate 
}