【发布时间】:2016-11-27 04:26:08
【问题描述】:
我从 Web 服务接收 JSON 数据,其中日期为字符串格式,包括时区格式,如下所示:
{
currencyName = EUR;
itemID = 101064027138011;
price = "6.95";
priceIncTAX = 1;
validFromDate = "2016-11-03T00:00:00";
validToDate = "2020-01-01T00:00:00";
}
当我尝试将包含时区的字符串转换为 NSDate 时,返回值始终为 nil/null,如果我手动发送没有时区信息的字符串,例如 @"2016-11-03",则转换工作正常但结果日期包括时区偏移等,不符合我的 dateFormatter
我使用下面的代码来展示手头的挑战
NSString *validTo = @"2016-11-03";
NSString *validFrom = @"2020-11-03T00:00:00";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd"];
NSDate *validToDate = [dateFormat dateFromString:validTo];
NSDate *validFromDate = [dateFormat dateFromString:validFrom];
if([NWTillHelper isDebug] == 1) {
NSLog(@"WebServices:fetchPriceList:validToDate: >>>> %@ <<<<", validToDate);
NSLog(@"WebServices:fetchPriceList:validFromDate: %@", validFromDate);
}
调试告诉我,没有 tz 信息的字符串可以正常工作(除了不遵守我的 dateFormatter),但有 tz 信息的字符串不能。
如何将包含 tz 信息的字符串转换为 NSDate 以及为什么当我发送没有时区信息的字符串时它不遵守我的 dateFormatter。
016-11-27 12:09:22.194 NWMobileTill[4275:235671] WebServices:fetchPriceList:validToDate: >>>> 2016-11-02 16:00:00 +0000 <<<<
2016-11-27 12:09:22.194 NWMobileTill[4275:235671] WebServices:fetchPriceList:validFromDate: (null)
【问题讨论】:
-
您的 JSON 日期字符串中没有时区信息。
-
你真的认为
YYYY-MM-dd这个格式真的匹配了2020-11-03T00:00:00这个字符串吗?他们需要匹配。并且不要使用YYYY,使用yyyy一年。
标签: ios nsdateformatter