1

SQLiteは日名と月名をサポートしていないことを知っています。私はこの質問に答えました。そのために2つのカスタム関数を作成しました。

日の名前を日番号から変換するためのカスタム関数:

( %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 形式を使用する 1 つの方法を次に示します。

// 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 に答える