1

我知道 SQLite 不支持日期名称和月份名称。我已经解决了这个问题。我为它创建了两个自定义函数。

我从天数转换日期名称的自定义函数:

( %w day of week 0-6 with sunday==0 )

代码:

+(NSString*)dayNameStringFromDayNo:(NSString*)dayNo{
    return 
    ([dayNo isEqualToString:@"0"])?@"Sunday":
    ( ([dayNo isEqualToString:@"1"])?@"Monday":
     ( ([dayNo isEqualToString:@"2"])?@"Tuesday":
      ( ([dayNo isEqualToString:@"3"])?@"Wednesday":
       ( ([dayNo isEqualToString:@"4"])?@"Thursday":
        ( ([dayNo isEqualToString:@"5"])?@"Friday": @"Saturday"
        )
       )
      )
     )
    );
}

我从没有字符串的月份获取月份名称的自定义方法:

( %m month: 01-12 )

代码:

+(NSString*)monthNameFromNumber:(NSString*)no{
    return ([no isEqualToString:@"01"])?@"January":
    ( ([no isEqualToString:@"02"])?@"February":
     ( ([no isEqualToString:@"03"])?@"March":
      ( ([no isEqualToString:@"04"])?@"April":
       ( ([no isEqualToString:@"05"])?@"May":
        ( ([no isEqualToString:@"06"])?@"June":
         ( ([no isEqualToString:@"07"])?@"July":
          ( ([no isEqualToString:@"08"])?@"August":
           ( ([no isEqualToString:@"09"])?@"September":
            ( ([no isEqualToString:@"10"])?@"October":
             ( ([no isEqualToString:@"11"])?@"November":@"Decemeber"
             )
            )
           )              
          )
         )
        )
       )
      )
     )
    );
}

但是日期遵循格式呢

Sat 6th February

如何获得这种输出?我是否必须再次为其创建自定义函数?

4

3 回答 3

3

你从 SQLite 得到什么日期格式?SQLite 没有本地日期/时间数据类型,但通常将日期存储为 ISO8601 格式的字符串YYYY-MM-DD HH:MM:SS或 Unix 样式的时间戳。

第 1 步:获取日期为NSDate. 这是一种方法,使用上面提到的 ISO8601 格式:

// Create a date formatter
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

// Use the formatter to convert the string you retrieved (from
// SQLite) into an NSDate.
NSDate *theDate = [inputFormatter dateFromString:yourSQLiteString];

// Don't forget to release alloc'ed resources
[inputFormatter release];

如果您的日期存储为 Unix 样式的时间戳,您可以跳过使用输入格式化程序并NSDate dateWithTimeIntervalSince1970:改用。

第 2 步:将日期转换为字符串:

// Create a date formatter for whatever format you want to output,
// using the formatting patterns from Unicode tr35-6 Appendix F.
outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"EEE d MMMM"];
NSString *dateString = [dateFormatter stringFromDate:theDate];

// Don't forget to release alloc'ed resources.
[outputFormatter release];

在此示例中,您将得到一个类似 的字符串Sat 6 February,假设用户在英语语言环境中。

参考:

于 2010-05-10T07:26:47.333 回答
1

为什么不使用客户端代码的格式化功能,或者 ojective-c 不包含 strftime?

于 2010-05-10T07:01:39.573 回答
0

好的。我终于为它添加了一些自定义方法。

+(NSString*)dayNameStringFromDayNo:(NSString*)dayNo{
    return 
    ([dayNo isEqualToString:@"0"])?@"Sunday":
    ( ([dayNo isEqualToString:@"1"])?@"Monday":
     ( ([dayNo isEqualToString:@"2"])?@"Tuesday":
      ( ([dayNo isEqualToString:@"3"])?@"Wednesday":
       ( ([dayNo isEqualToString:@"4"])?@"Thursday":
        ( ([dayNo isEqualToString:@"5"])?@"Friday": @"Saturday"
         )
        )
       )
      )
     );
}

+(NSString*)dayNameHalfStringFromDayNo:(NSString*)dayNo{
    return 
    ([dayNo isEqualToString:@"0"])?@"Sun":
    ( ([dayNo isEqualToString:@"1"])?@"Mon":
     ( ([dayNo isEqualToString:@"2"])?@"Tues":
      ( ([dayNo isEqualToString:@"3"])?@"Wed":
       ( ([dayNo isEqualToString:@"4"])?@"Thu":
        ( ([dayNo isEqualToString:@"5"])?@"Fri": @"Sat"
         )
        )
       )
      )
     );
}

+(NSString*)monthNameFromNumber:(NSString*)no{
    return ([no isEqualToString:@"01"])?@"January":
    ( ([no isEqualToString:@"02"])?@"February":
     ( ([no isEqualToString:@"03"])?@"March":
      ( ([no isEqualToString:@"04"])?@"April":
       ( ([no isEqualToString:@"05"])?@"May":
        ( ([no isEqualToString:@"06"])?@"June":
         ( ([no isEqualToString:@"07"])?@"July":
          ( ([no isEqualToString:@"08"])?@"August":
           ( ([no isEqualToString:@"09"])?@"September":
            ( ([no isEqualToString:@"10"])?@"October":
             ( ([no isEqualToString:@"11"])?@"November":@"Decemeber"
              )
             )
            )              
           )
          )
         )
        )
       )
      )
     );
}


+(NSString*)monthNameHalfFromNumber:(NSString*)no{
    return ([no isEqualToString:@"01"])?@"Jan":
    ( ([no isEqualToString:@"02"])?@"Feb":
     ( ([no isEqualToString:@"03"])?@"Mar":
      ( ([no isEqualToString:@"04"])?@"Apr":
       ( ([no isEqualToString:@"05"])?@"May":
        ( ([no isEqualToString:@"06"])?@"Jun":
         ( ([no isEqualToString:@"07"])?@"Jul":
          ( ([no isEqualToString:@"08"])?@"Aug":
           ( ([no isEqualToString:@"09"])?@"Sep":
            ( ([no isEqualToString:@"10"])?@"Oct":
             ( ([no isEqualToString:@"11"])?@"Nov":@"Dec"
              )
             )
            )              
           )
          )
         )
        )
       )
      )
     );
}

+(NSString*)suffixNameForNumber:(NSString*)no{
    NSInteger noV=[no intValue];
    if(noV>=11 && noV<=20){
        return [no stringByAppendingString:@"th"];
    } else {
        NSString *l=[no substringFromIndex:1];
        if([l isEqualToString:@"1"]){
            return [no stringByAppendingString:@"st"];
        } else if([l isEqualToString:@"2"]){
            return [no stringByAppendingString:@"nd"];
        } else if([l isEqualToString:@"3"]){
            return [no stringByAppendingString:@"rd"];
        } else {
            return [no stringByAppendingString:@"th"];
        }
    }   
}
于 2010-05-10T09:42:08.433 回答