从具有localtimezone的服务器应用NSDate获取NSDate

时间:2015-11-05 08:33:52

标签: objective-c timezone nsdate

我从服务器返回NSDate(在GMT + 2上运行) 我用服务器的日期和设备当前日期计算了一些东西。

问题(显然)是设备在不同的时区运行,然后是我的服务器。

如何申请和更改服务器的NSDate以返回当前设备NSDate以便我的计算对每个时区都是准确的。

我只需要一个能够通过服务器的时区(gmt + 2)获取服务器NSDate的功能,并返回正确的设备NSDate。

希望有人可以帮助我

服务器返回Ticks(在c#上运行)并使用此代码

操作到nsdate
double tickFactor = 10000000;
double ticksDoubleValue = [ticks doubleValue];
double seconds = ((ticksDoubleValue - 621355968000000000)/ tickFactor);
NSDate *returnDate = [NSDate dateWithTimeIntervalSince1970:seconds];
return returnDate;

1 个答案:

答案 0 :(得分:1)

NSDate类存储绝对时间。为此,它表示UTC时间,这是时区不可知的。但是,如果创建NSDate,则假定时间为UTC。即使你使用NSDateFormatter来"阅读"在创建NSDate之前,来自字符串的日期,它代表您进行数学运算。

如果您的时间表示包含时区偏移,则需要在进行转换时考虑该时间。如上所述,给定正确的格式字符串,NSDateFormatter将为您执行此操作。如果您的表示是数字(通常是某个日期的秒数),则需要添加或减去时区偏移量。如果偏移为负,则添加,如果它为正,则减去。

要调整服务器本地时间提供的服务器日期,请根据服务器的时区进行调整。对于GMT + 2,减去3600 * 2(每小时的秒数*偏移量)。这给出了UTC的秒数。使用`[NSDate dateWithTimeIntervalSince1970:]创建NSDate时。这将是预期的时间。