• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 从像 '+-hh:mm' 这样的字符串中提取 NSTimeZone

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:48:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的应用程序中,我从 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"]];

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

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

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

提前致谢!



Best Answer-推荐答案


再次:当您说“本地时间”时,您的意思是返回字符串的本地时间,而不是用户的本地时间?所以我从德国收到了一个日期,我有足够的信息把它变成一个 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]);

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap