在我的应用中,我使用的是NSTimer并使用了initWithFireDate。 我想从现在开始一小时后开火。 "现在"指当地时区。 当我试图让添加添加一小时并尝试打印时,它会以GMT打印时间而不是根据我的时区。 我该如何解决这个错误? 我希望NSDate从现在起1小时,具体取决于当地时区。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
NSDateFormatter * formater = [[NSDateFormatter alloc] init]; formater.timeZone = [NSTimeZone localTimeZone]; 用它来定位你的时区。
答案 2 :(得分:0)
你可以使用NSDateFormatter获取日期字符串的不同格式。试试吧,你会得到你期望的答案。
答案 3 :(得分:0)
在抽出时间后,找到时区并相应地添加时差。
答案 4 :(得分:0)
这是我在Swift中的Bikramjit Singh代码版本(仅使用“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)")
}
<强>更新强>
我实际上找到了一个更短的方式来获取日期,这种方式对我来说效果更好:
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
}