IOS中的日期/时间解析:如何处理时区?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

我有一个ASP.NET MVC 3网站,通过JSON与我的iOS应用进行通信。作为JSON响应中发送的对象的一部分,我使用yyyy-MM-dd HH:mm:ss ZZZ输出格式的日期2011-04-05 16:28:22 -07:00。我如何在iOS中解析?

这是我现在搞乱的代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [dateFormatter dateFromString:@"2011-04-05T16:28:22-0700"];

NSLog(@"%@; %@; %@", dateFormatter, date, [NSTimeZone localTimeZone]);

首先要注意的是,2011-04-05 16:28:22 -07:00有看起来像2011-04-05T16:28:22-0700,其中T替换第一空间(假定表示时间,或者字符串的一部分时间从?开始),第二空间被删除。我想我会找到一种方法来格式化.NET发送的字符串以符合iOS将解析的字符串。

真正的问题是,输出的日期比我在JSON响应中发送的日期晚了7个小时。所以,iOS的输出2011-04-05 16:28:22 -07:002011-04-05 23:28:22 +0000,而且就我的应用而言,这是错误的。

我迄今发现的唯一解决方案是将日期发送到JSON中2011-04-05 16:28:22 +00:00,但这又是错误的,因为我正在改变实际日期

无论如何,我希望有人看一看,让我知道如何解析日期字符串.NET通过格式yyyy-MM-dd HH:mm:ss ZZZ(我认为可以重新写入yyyy-MM-ddTHH:mm:ssZZZ)输出到NSDate我可以在iOS中使用的对象。

提问于
用户回答回答于

我不知道这有多正确,但我最终发现在.NET中我必须这样做DateTime.ToUniversalTime().ToString("yyyy-MM-ddHH:mm:ss")在IOS方面,我必须这样做:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-ddHH:mm:ss"];
NSDate *date = [dateFormatter dateFromString:@"2011-04-0600:28:27"];

只有这样,日期才是正确的。

用户回答回答于

IOS日期解析代码是正确的:2011-04-05 16:28:22 -07:002011-04-05 23:28:22 +0000代表相同的时间,只是在不同的时区。唯一的问题是NSDate实际上并不存储时区,所以[date description]输出使用UTC。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励