Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
Iphone 用于在2011年9月14日转换为2011年9月14日的日期格式化程序_Iphone_Nsdate_Nsdateformatter - Fatal编程技术网

Iphone 用于在2011年9月14日转换为2011年9月14日的日期格式化程序

Iphone 用于在2011年9月14日转换为2011年9月14日的日期格式化程序,iphone,nsdate,nsdateformatter,Iphone,Nsdate,Nsdateformatter,我有一个字符串2011年9月14日需要转换此9月14日。此日期可以是任何日期字符串。是否有任何日期格式化程序允许我将日期转换为我的格式。如果日期是2011年9月1日,那么我需要9月1日,2011年9月2日应该是9月2日 谁能提出解决办法 谢谢使用它 NSString *string =@"14-Sep-2011"; NSArray *arr = [string componentsSeparatedByString:@"-"]; NSString *str1=[arr

我有一个字符串2011年9月14日需要转换此9月14日。此日期可以是任何日期字符串。是否有任何日期格式化程序允许我将日期转换为我的格式。如果日期是2011年9月1日,那么我需要9月1日,2011年9月2日应该是9月2日

谁能提出解决办法

谢谢使用它

     NSString *string =@"14-Sep-2011";
    NSArray *arr = [string componentsSeparatedByString:@"-"];
    NSString *str1=[arr objectAtIndex:0];
    str1=[str1 stringByAppendingString:@"th"];
    NSString *final=[str1 stringByAppendingFormat:@" %@",[arr objectAtIndex:1]];

您可以尝试以下代码,因为我已成功运行

    NSString *dateStr = @"14-Sep-2011";
    NSDateFormatter *dtF = [[NSDateFormatter alloc] init];
    [dtF setDateFormat:@"dd-MMM-yyyy"];
    NSDate *d = [dtF dateFromString:dateStr];
    NSDateFormatter *monthDayFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [monthDayFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
    [monthDayFormatter setDateFormat:@"d MMM"];         
    int date_day = [[monthDayFormatter stringFromDate:d] intValue];      
    NSString *suffix_string = @"|st|nd|rd|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|st|nd|rd|th|th|th|th|th|th|th|st";
    NSArray *suffixes = [suffix_string componentsSeparatedByString: @"|"];
    NSString *suffix = [suffixes objectAtIndex:date_day];   
    NSString *format = [NSString stringWithFormat:@"%d",date_day];
    NSString *dateStrfff = [format stringByAppendingString:suffix];
    NSLog(@"%@", dateStrfff);
    [monthDayFormatter setDateFormat:@"MMM"];
    NSString *ss = [monthDayFormatter stringFromDate:d];
    NSLog(@"%@",ss);

    NSString *final = [dateStrfff stringByAppendingString:ss];
    NSLog(@"final string:---> %@",final);
这是您想要的完美解决方案。

-(NSString*)ordinalSuffixFromInt:(int)number{
- (NSString *)ordinalSuffixFromInt:(int)number {
    NSArray *cSfx = [NSArray arrayWithObjects:@"th", @"st", @"nd", @"rd", @"th", @"th", @"th", @"th", @"th", @"th", nil];
    NSString *suffix = @"th";

    number = abs(number % 100);
    if ((number < 10) || (number > 19)) {
        suffix = [cSfx objectAtIndex:number % 10];
    }
    return suffix;
}
NSArray*cSfx=[NSArray阵列,其对象为:@“th”,“st”,“nd”,“rd”,“th”,“th”,“th”,“th”,“th”,“th”,“th”,“th”,“th”,“nil]; NSString*后缀=@“th”; 数量=abs(数量%100); 如果((数量<10)| |(数量>19)){ 后缀=[cSfx objectAtIndex:number%10]; } 返回后缀; }
测试:

-(无效)测试{

对于(int day=1;day这将适用于任何数字:

 -(NSString *) ordinalSuffix: (NSInteger) day {
    NSString *ordinalSuffix;

    if(day%10 == 1 && day%100 != 11) ordinalSuffix = @"st";
    else if(day%10 == 2 && day%100 != 12) ordinalSuffix = @"nd";
    else if(day%10 == 3 && day%100 != 13) ordinalSuffix = @"rd";
    else ordinalSuffix = @"th";

    return ordinalSuffix;
 }
测试:

 -(void) test {
     for(NSInteger i = 1; i < 200; i++)
         NSLog(@"%d%@", i, [self ordinalSuffix:i]);
 }
-(无效)测试{
对于(NSInteger i=1;i<200;i++)
NSLog(@“%d%”,i,[self-ordinalSuffix:i]);
}

类似的问题此日期从何而来?
my be any date string
有很多可能的字符串要尝试解析!如果是后缀(st、nd等)你在后面,那么Joe链接到的问题有了答案。任何日期都意味着任何日历日期..格式将是相同的dd-mmm-yyyy..我不想分析这个。我想知道是否有任何带有
NSDateFormatter
的格式可以用来获取dd(st/nd/rd/th)mmmm格式字符串或我必须编写手动逻辑。这不是完美的解决方案。因为每个日期都不接受
th
一些要求
st
nd
rd
。我可以按照您所说的检查条件,但我想知道是否有任何
NSDateFormatter
格式要设置。很高兴您能遵循查看重复问题/答案的链接,即使提交者不能;-)如果我看一下这个问题的分配金额,这看起来不是一个完美的解决方案,meDate 11的分配是第11位,而不是第11位。12、13等也一样。你可以看到@Zaph我已经标记好了。一个月的最长日期可能是31号。你的解决方案不适用于此。无论如何,谢谢你的回复:)
 -(void) test {
     for(NSInteger i = 1; i < 200; i++)
         NSLog(@"%d%@", i, [self ordinalSuffix:i]);
 }