Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将字符串转换为日期?_Ios_Objective C_Nsstring_Nsdate_Nsdateformatter - Fatal编程技术网

Ios 如何将字符串转换为日期?

Ios 如何将字符串转换为日期?,ios,objective-c,nsstring,nsdate,nsdateformatter,Ios,Objective C,Nsstring,Nsdate,Nsdateformatter,我知道这里有很多关于这个话题的问题。然而,我似乎无法解决我的问题 我有这个字符串,例如,“2013-08-26 12:11:51 10:17:25”,我只想抓取“2013-08-26”,然后将其转换回字符串。我尝试了很多方法,但都没有成功: NSMutableString *visitDate = [[NSMutableString alloc] initWithString:@"2013-08-26 10:17:25"]; NSDateFormatter *dateFormat = [[NSD

我知道这里有很多关于这个话题的问题。然而,我似乎无法解决我的问题

我有这个字符串,例如,“2013-08-26 12:11:51 10:17:25”,我只想抓取“2013-08-26”,然后将其转换回字符串。我尝试了很多方法,但都没有成功:

NSMutableString *visitDate = [[NSMutableString alloc] initWithString:@"2013-08-26 10:17:25"];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormat dateFromString:visitDate];
NSLog(@"date: %@", date);
NSMutableString *returnConvertedDateString = [[NSMutableString alloc]initWithString:(NSMutableString *)date];    
NSLog(@"converted string: %@", returnConvertedDateString);
上述NSLog语句的结果是:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPlaceholderMutableString initWithString:]: nil argument'
我还尝试:

-  (NSMutableString *) convertDateToString : (NSMutableString *)visitDate{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [calendar components:units fromDate:(NSDate *)visitDate];
NSMutableString *returnConvertedDateString = [[NSMutableString alloc]initWithFormat:@"%ld-%ld-%ld", (long)[components year], (long)[components month],(long)[components day]];
return returnConvertedDateString;
}

假设日期时间字符串的格式为
NSString*visitDate=@“2013-08-26 12:11:51 10:17:25”

尝试以下方法:

-  (NSString *) convertDateToString:(NSString *)visitDate{
  NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\d{4}-\d{2}-\d{2})" options:NSRegularExpressionCaseInsensitive error:NULL];
  NSTextCheckingResult *firstMatch = [regex firstMatchInString:opening_time options:0 range:NSMakeRange(0, [visitDate length])];
  if (firstMatch) {
      NSRange range = [firstMatch rangeAtIndex:0];
      NSString *dateString = [urlString substringWithRange:range];
      return dateString;
  }
  return nil;
}

此方法应仅提取字符串的
yyyy-MM-dd
部分,并作为字符串表示返回。如果需要,记得将其修改为可变版本。

最简单的方法是

NSMutableString*visitDate=[[NSMutableString alloc]initWithString:@“2013-08-26 12:11:51”]


您的字符串中有重复的时间。假设是打字错误,你可以像这样得到你想要的

NSDateFormatter * dateFormatter = [NSDateFormatter new];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate * date = [dateFormatter dateFromString:@"2013-08-26 12:11:51"];

[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSString * dateString = [dateFormatter stringFromDate:date];

NSLog(@"%@", dateString);

如果你想要一个字符串,为什么不直接返回前10个字符呢

[dateString substringToIndex:10];

NSLog语句的结果是什么?是否有理由转换为日期并返回字符串?从你的问题来看,似乎一个简单的正则表达式提取就能完成这项工作……它给出了一个错误。“由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:”***-[NSPlaceholderMutableString initWithString:::nil参数“”。请尝试使用NSString启动时间字符串。比如NSString*visitDate=@“2013-08-26 12:11:51”;显然,去掉最后一部分。谢谢@carlvaezey。您的输入字符串没有任何意义。那是什么日期格式?太棒了。但是,您能否向我解释一下为什么需要两次设置DateFormat?因为在将字符串转换为日期对象之前,您使用一次设置DateFormat可以使
NSDateFormatter
识别您的字符串,一旦您拥有了日期对象,您就可以再次使用它从日期中删除不必要的部分并将其转换回字符串。我发现大多数人都使用两个
NSDateFormatter
对象来实现这一点,但是您可以看到没有必要这样做,因为您可以使用不同的格式重用它。
[dateString substringToIndex:10];