ios - 从 '+-hh:mm' 等字符串中提取 NSTimeZone

标签 ios nsdate nsdateformatter nstimezone

在我的应用程序中,我从 API 下载一些 JSON 数据,其中包含带有本地时间的条目:

"local_date" : "2015-07-08T13:18:14+02:00"

JSON 数据被解析为 NSDictionary* 信息:

NSDateFormatter* dateFormatter= [NSDateFormatter new];
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
NSDate *date = [self.dateFormatter dateFromString:information[@"local_date"]];

日期现在已在UTC中正确设置(我需要进行一些计算),但为了在用户界面中显示本地数据,我需要在正确的时区显示日期。

我的问题是: 如何从字符串中提取 NSTimeZone ?我正在寻找类似 NSTimeZone* timeZone = [NSTimeZone parseFromString:@"+02:00"];

我已经阅读了 NSDateFormatter、NSCalendar 和 NSTimeZone 的文档,但没有找到如何从像我这样的字符串中获取时区。

提前致谢!

最佳答案

再说一次:当你说“在本地时间”时,你的意思是返回字符串的本地时间,而不是用户的本地时间?因此,我从德国收到了一个日期,我有足够的信息将其转换为 NSDate,以便我可以创建一个 NSDateFormatter 来准确地重新创建原始字符串,即我想要的输出?

首先:时区实际上不在您提供的字符串中。它显示 +02:00,告诉您与 GMT 的偏移量。它不会告诉您时区。例如。现在 +02:00 的偏移量可能是 SAST(南非时区),可能是 EET(东欧时区),可能是 CAT(中非时区)等。因此,没有直接的方法从偏移量进行映射到区域。

假设您只是想保留偏移量以便稍后应用它,luk2302的建议可能是正确的方向,但我会采取相反的方式(我也会注意 QA1480 ):

NSString *time = @"2015-07-08T13:18:14+02:00"; // or whatever

NSDateFormatter *dateFormatter= [NSDateFormatter new];
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
NSDate *correctDate = [dateFormatter dateFromString:time];

NSDate *dateWithoutOffset = correctDate;
NSRange rangeOfPlus = [time rangeOfString:@"+"];
if(rangeOfPlus.location != NSNotFound)
{
    dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss";
    dateWithoutOffset = [dateFormatter dateFromString:[time substringToIndex:rangeOfPls.location]];     
}

NSLog(@"Offset in date was %0.0f seconds", [dateWithoutOffset timeIntervalSinceDate:correctDate]);

因为你正在做一些迟钝和不寻常的事情 - 普通应用程序仅处理固定日期格式字符串,没有时区的日期(如在 NSDate 内),并在 中显示内容>用户的本地时间 - 您可能需要手动存储和处理偏移量。

关于ios - 从 '+-hh:mm' 等字符串中提取 NSTimeZone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31291391/

相关文章:

swift - 我的滚动虽然通常很顺利,但有时会很不稳定

呈现具有不成比例的轴值的交互式时间轴的 JavaScript 库?

ios - Swift 将 NSDate 转换为 24h 格式在设备上失败

ios - 如何以特定格式获取一年中的所有月份

ios - 保存 NSDate 后忽略时区更改

objective-c - Objective C 比较 NSDate 中的两个日期字符串

ios - 日期选择器显示与选择时不同的日期(晚 1 天)

iphone - 如何制作逐渐显示 UIImageView 的动画?

ios - 如何在 Swift 中使用约束为 UIView 设置动画?

ios - Xamarin 中的 NSRegularExpression 类