我从服务器返回NSDate(在GMT + 2上运行) 我用服务器的日期和设备当前日期计算了一些东西。
问题(显然)是设备在不同的时区运行,然后是我的服务器。
如何申请和更改服务器的NSDate以返回当前设备NSDate以便我的计算对每个时区都是准确的。
我只需要一个能够通过服务器的时区(gmt + 2)获取服务器NSDate的功能,并返回正确的设备NSDate。
希望有人可以帮助我
服务器返回Ticks(在c#上运行)并使用此代码
操作到nsdatedouble tickFactor = 10000000;
double ticksDoubleValue = [ticks doubleValue];
double seconds = ((ticksDoubleValue - 621355968000000000)/ tickFactor);
NSDate *returnDate = [NSDate dateWithTimeIntervalSince1970:seconds];
return returnDate;
答案 0 :(得分:1)
NSDate
类存储绝对时间。为此,它表示UTC时间,这是时区不可知的。但是,如果创建NSDate,则假定时间为UTC。即使你使用NSDateFormatter
来"阅读"在创建NSDate
之前,来自字符串的日期,它代表您进行数学运算。
如果您的时间表示包含时区偏移,则需要在进行转换时考虑该时间。如上所述,给定正确的格式字符串,NSDateFormatter
将为您执行此操作。如果您的表示是数字(通常是某个日期的秒数),则需要添加或减去时区偏移量。如果偏移为负,则添加,如果它为正,则减去。
要调整服务器本地时间提供的服务器日期,请根据服务器的时区进行调整。对于GMT + 2,减去3600 * 2
(每小时的秒数*偏移量)。这给出了UTC的秒数。使用`[NSDate dateWithTimeIntervalSince1970:]创建NSDate时。这将是预期的时间。