0

我有一个 ipad 应用程序,它在 y 轴上绘制一个随时间变化的图表。现在我的问题是,用户可以在世界任何地方访问相同的图表。但随后应调整图表上的时间,使其与用户的当前时区相对应。因此,图表上的时间应补偿时区之间的任何时间差异。如果我通过发送图表的设备的时区,谁能告诉我如何从当前设备获取时区并计算偏移时间。

这是我的日期格式化功能。我打算将时区也与日期一起传递。

+(NSDate *)DateUKFormatFromString:(NSString *)date
{
  NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
  NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
  [dateFormatter setLocale:locale];
  [dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
  NSDate* returnDate = [dateFormatter dateFromString:date];    
  return returnDate;
}

提前致谢。

4

2 回答 2

3

有一个 dateFormatter 实例方法setTimeZone:像这样使用它

[NSTimeZone resetSystemTimeZone];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

有关这两种方法的信息,请阅读文档。希望能帮助到你。干杯

编辑:

如果来自服务器的日期是针对特定时区(服务器的时区)的。然后你需要得到 timeZone

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:"Server timezone name"];
NSInteger serverDifference = [timeZone secondsFromGMT];

[NSTimeZone resetSystemTimeZone];
NSTimeZone *systemTimeZone = [NSTimeZone systemTimeZone];
NSInteger systemDifference = [systemTimeZone secondsFromGMT];

NSInteger difference = systemDifference - serverDifference;
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:difference]];

如果您没有从服务器获得 0 GMT 时差,请尝试此操作。

于 2013-05-16T13:54:50.310 回答
0
+(NSDate *)DateUKFormatMonthFromString:(NSString *)date AndTimeZoneName:(NSString *) timeZoneName
{
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy HH:mm:ss"];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:timeZoneName];
[formatter setTimeZone:timeZone];
NSDate *date1 = [formatter dateFromString:date];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
return date1; 
}

最后,这对我有用......似乎iOS会自行处理时区差异......!!!

于 2013-05-21T09:21:12.873 回答