我有一个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;
}
提前致谢。
答案 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会自行处理时区差异...... !!!