计算与不同时区对应的日期和时间

时间:2013-05-16 13:45:08

标签: iphone ios timezone nsdateformatter

我有一个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;
}

提前致谢。

2 个答案:

答案 0 :(得分: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差异时间,请尝试此操作。

答案 1 :(得分: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会自行处理时区差异...... !!!