【问题标题】:Need to convert NSString to Nsdate需要将 NSString 转换为 Nsdate
【发布时间】:2013-06-11 19:52:00
【问题描述】:

我需要将“2013-05-05T00:00:00Z”这个字符串转换为 NSDate,然后再将 NSDate 转换为 Nsstring。我尝试过不同的格式样式,但没有取得任何成功。

我已经检查过了。

NSDate from NSString

Convert NSDate to Sql Server Datetime format

谢谢。

// for getting string for Advance search  

-(NSDate*) doGetDateFromStringGSearch :(NSString*) dateStr 
{

NSDateFormatter * outputFormatter4 = [[[NSDateFormatter alloc ] init ] autorelease ];

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[outputFormatter4 setLocale:locale];

//[outputFormatter4 setDateFormat: @"yyyy-MM-dd'T'HH:mm:ss:SSS"];
//[outputFormatter4 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
 [ outputFormatter4 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss:Z" ];
 //[ outputFormatter4 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss':00Z'" ];

NSString * inputString2 = dateStr;
NSDate * inputRecivedToDate = [outputFormatter4 dateFromString:inputString2 ];
NSLog(@"doGetDateFromString  %@", inputRecivedToDate);

return [[inputRecivedToDate retain] autorelease];
}

【问题讨论】:

  • 无论你尝试什么......显示代码
  • 请立即查看......
  • [ outputFormatter4 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"]; 可以正常工作。有关更多详细信息,请参阅answer

标签: ios nsdate nsdateformatter


【解决方案1】:

将格式化程序字符串更改为:

[outputFormatter4 setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss'Z'"];

完整代码:

NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss'Z'"];
NSDate *date=[dateFormatter dateFromString:@"2013-05-05T00:00:00Z"];

NSLog(@"%@",date);

【讨论】:

  • 你能看看这个answer和cmets。根据 ISO8601 字符 Z 是 UTC 的简写。如果您忽略它,则会出现时区问题,因为 dateFormatter 的默认时区将是特定于设备的。
  • 这种格式可以。但它完全忽略了时区。字符Z 的存在表示该字符串采用UTC。如果忽略此 Z,则需要将时区显式设置为 dateFormatter。如果不做,会根据设备的localTimeZone输出错误。
  • 对于日期“2013-05-05T00:00:00Z”它给了我“2013-05-04 18:30:00 +0000”,它不是正确的日期:(
  • 你在印度,距格林威治标准时间 +5:30,所以 1830 + 0530 = 0000。
  • @Mangesh 这正是我所说的问题。 dateString 采用 UTC 格式,它现在正在执行这种解析。形成的日期采用 IST(印度标准时间),因此会有 05:30 的滞后。您可以通过将 timeZone UTC 设置为格式化程序或使用我建议的方法来删除它。
【解决方案2】:

多年来,我一直在使用具有 @"yyyy-MM-dd'T'HH:mm:ssZZZZ" 格式的 NSDateFormatter,但发现在少数但只有少数(可能少于 1%)的设备上它不成功并且返回 nil。

因此,作为备用我一直在使用这个库:https://github.com/keithpitt/ISO8601DateFormatter,现在我没有看到解析 ISO8601 日期格式的任何问题。

该库支持dateFromString:stringFromDate:

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2017-04-23
    • 2021-09-11
    • 2016-09-01
    • 2013-01-16
    • 2012-12-17
    相关资源
    最近更新 更多