Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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 使用NSDateFormatter从字符串获取日期时,如何忽略某些字符?另外,是否有NSDateFormatter的参考资料?_Ios_Nsdateformatter - Fatal编程技术网

Ios 使用NSDateFormatter从字符串获取日期时,如何忽略某些字符?另外,是否有NSDateFormatter的参考资料?

Ios 使用NSDateFormatter从字符串获取日期时,如何忽略某些字符?另外,是否有NSDateFormatter的参考资料?,ios,nsdateformatter,Ios,Nsdateformatter,我的问题很简单。我有格式为“2015年9月16日”的字符串 在生成日期字符串时,我将NSDateFormatter用作“d MMM yyy”,然后手动修改它以使用开关大小写插入日期后缀 现在,我需要再次提取日期 有没有办法忽略这两个字母 此外,我一直在使用谷歌学习NSDateFormatter,只是在下面的帖子中,比如,但我所有的问题都没有得到回答,有时,所描述的行为不匹配 苹果公司是否有一个标准参考文件,其中描述了日期格式化程序代码?恐怕只有部分答案,但苹果公司基本上实现了该规范: 该规范确实

我的问题很简单。我有格式为“2015年9月16日”的字符串

在生成日期字符串时,我将NSDateFormatter用作“d MMM yyy”,然后手动修改它以使用开关大小写插入日期后缀

现在,我需要再次提取日期

有没有办法忽略这两个字母

此外,我一直在使用谷歌学习NSDateFormatter,只是在下面的帖子中,比如,但我所有的问题都没有得到回答,有时,所描述的行为不匹配


苹果公司是否有一个标准参考文件,其中描述了日期格式化程序代码?

恐怕只有部分答案,但苹果公司基本上实现了该规范:


该规范确实提出了一种称为“宽松解析”的方法,允许解析器忽略一些无关字符,但至少按照标准中的定义,这似乎没有扩展到您的特定情况。因此,在将字符串交给解析器之前,您显然必须手动删除天数中的后缀,除非它恰好“正常工作”,我认为它不会这样做。

恐怕只有部分答案,但苹果基本上实现了此规范:


该规范确实提出了一种称为“宽松解析”的方法,允许解析器忽略一些无关字符,但至少按照标准中的定义,这似乎没有扩展到您的特定情况。因此,在将字符串交给解析器之前,您显然必须手动删除天数中的后缀,除非它碰巧是“正常工作”,我认为它不会这样做。

以下是具有正确日期格式的代码,这将是您的天使:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"d'th' MMM yyyy";

NSString *stringDate = [df stringFromDate:[NSDate date]];

//output -- 16th Sep 2015

现在,您可以使用此dateformatter在对象之间进行转换。

以下是具有正确日期格式的代码:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"d'th' MMM yyyy";

NSString *stringDate = [df stringFromDate:[NSDate date]];

//output -- 16th Sep 2015

现在,您可以使用此dateformatter与
NSDate
对象进行转换。

NSDateformatter
不支持带序号指标的天数,但您可以使用正则表达式去除指标

var dateString = "16th Sep 2015"
if let range = dateString.range(of: "(st|nd|rd|th)", options: .regularExpression) {
    dateString.removeSubrange(range)
}    
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "dd MMM yyyy"
let date = formatter.date(from: dateString)!
print(date)
或者在Objective-C中

NSMutableString *dateString = [NSMutableString stringWithString:@"16th Sep 2015"];

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(st|nd|rd|th)" options:nil error:nil];
[regex replaceMatchesInString:dateString options: nil range: NSMakeRange(0, 4) withTemplate:@""];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"d MMM yyyy";
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"%@", date);

NSDateformatter
不支持带有序号指标的天数,但您可以使用正则表达式去除指标

var dateString = "16th Sep 2015"
if let range = dateString.range(of: "(st|nd|rd|th)", options: .regularExpression) {
    dateString.removeSubrange(range)
}    
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "dd MMM yyyy"
let date = formatter.date(from: dateString)!
print(date)
或者在Objective-C中

NSMutableString *dateString = [NSMutableString stringWithString:@"16th Sep 2015"];

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(st|nd|rd|th)" options:nil error:nil];
[regex replaceMatchesInString:dateString options: nil range: NSMakeRange(0, 4) withTemplate:@""];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"d MMM yyyy";
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"%@", date);

这不是最漂亮的解决方案,但它可以工作:

NSString *dateString = @"1st Sep 2015";

dateString = [dateString stringByReplacingOccurrencesOfString:@"st " withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"nd " withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"rd " withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"th " withString:@" "];

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"d MMM yyyy";

NSDate *date = [df dateFromString:dateString];

这不是最漂亮的解决方案,但它可以工作:

NSString *dateString = @"1st Sep 2015";

dateString = [dateString stringByReplacingOccurrencesOfString:@"st " withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"nd " withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"rd " withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"th " withString:@" "];

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"d MMM yyyy";

NSDate *date = [df dateFromString:dateString];

如果你有一个月的时间是3个字母,那么这个方法就行了,但是如果你有一个月的时间,这个方法就行不通了。例如,“Augu”将使用正则表达式变为“August”,您可以通过执行以下操作来检查字母前面是否有数字:

var dateString = "16th Sep 2015"
//regular expression using positive look behind. Checks for a digit, than a two letter combination that will match below
dateString = dateString.replacingOccurrences(of: "(?<=\\d)[snrt][tdh]", with: "", options: String.CompareOptions.regularExpression, range: nil)

let df = DateFormatter()
df.dateFormat = "d MMM yyyy" //if full month, add extra M
df.date(from: dateString)
var dateString=“2015年9月16日”
//使用正向查找的正则表达式。检查数字,而不是下面匹配的两个字母组合

dateString=dateString.replacingOccurrences(of):(?如果您的月份为3个字母,则该选项将有效,但如果您的月份为整月,则该选项将无效。例如,使用正则表达式,“Augu”将变为“August”,您可以通过执行以下操作来检查字母前是否有数字:

var dateString = "16th Sep 2015"
//regular expression using positive look behind. Checks for a digit, than a two letter combination that will match below
dateString = dateString.replacingOccurrences(of: "(?<=\\d)[snrt][tdh]", with: "", options: String.CompareOptions.regularExpression, range: nil)

let df = DateFormatter()
df.dateFormat = "d MMM yyyy" //if full month, add extra M
df.date(from: dateString)
var dateString=“2015年9月16日”
//使用正向查找的正则表达式。检查数字,而不是下面匹配的两个字母组合

dateString=dateString.replacingOccurrences(of:(?你能举例说明吗?因为我不理解你的问题。请检查我的答案,别忘了投票:)
NSString*dateString=@“2015年10月2日”;NSDateFormatter*formatter=[[NSDateFormatter alloc]init];[formatter setDateFormat:……];[格式化程序DATEOFSCONTRO: DATESTORK];什么是空白?有多个正确的答案提交,尽管我不能标记所有的答案,我很感谢:你能用例子来解释吗?因为我不能理解你的问题。签出我的答案,不要忘了向上投票:)代码> NScord*DATESTORY=@“2015年10月2日”NSDateFormatter *格式化程序= [[NStaseFrimtAtter OLC] init ];[格式化程序SETDATEFLATE:……] ];[格式化程序DATEOFSCONTRO: DATESTORY ];<代码>空白处有哪些?提交了多个正确答案,尽管我不能标记所有这些答案,但我很感谢:由于我使用的是d而不是dd,我最初认为删除它会有困难,但正如我插入它一样,我可以搜索并获得空格的范围,并在空格开始位置之前删除2个字符。不过我希望找到一种通过日期格式化程序的方法。我将检查宽松的解析。看起来很有希望。谢谢e我使用d而不是dd,我最初认为删除它会有困难,但就像我插入它一样,我可以搜索并获得空格的范围,并在空格的开始位置之前删除2个字符。我希望找到一种通过日期格式化程序的方法。我会检查宽松的解析。看起来很有希望。谢谢,嘿,我很高兴抱歉,这对我1不起作用。此代码将导致日期,如1。(是的,我在答复之前已检查)2.我想从字符串中获取日期,而不是从日期中获取字符串。但是,如果格式化程序正确,这不是一个真正的问题,因为它应该是双向的。感谢您的回答。嘿,很抱歉,这对我不起作用1。此代码将导致日期,例如1。(是的,我在回答之前已检查)2.我想从字符串中获取日期,而不是从日期中获取字符串。但是,如果格式化程序正确,这并不是一个真正的问题,因为它应该是双向的。感谢您的回答。是的,在某种程度上,我做了类似的事情。我搜索了空白字符,并在之前删除了2个字符。正如我在Markus的答:我想没有别的办法了。谢谢你的帮助和耐心:)是的,在某种程度上我做了些事情