21

「YYYY-MM-DD HH:MM:SS」という日時形式の文字列があります。

ソースコードでこれを使用します:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"%e. %B %Y"];
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"];

「2010-01-10 13:55:15」から「2010年1月10日」に変換したい。しかし、私の実装は機能しません。

ここで何が問題なのですか?

よろしくお願いします。

更新されたソース コード:

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"];
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"];

NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease];
[formatter1 setDateFormat:@"%d. %M4 %Y"];
NSString *test2 = [formatter1 stringFromDate:test1];
4

4 に答える 4

33

日付フォーマッターは、一度に 1 つの形式しか処理できません。次のアプローチを取る必要があります。

NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [f dateFromString:@"2010-01-10 13:55:15"];

NSDateFormatter *f2 = [[NSDateFormatter alloc] init];
[f2 setDateFormat:@"d. MMMM YYYY"];
NSString *s = [f2 stringFromDate:date];

s は「2010 年 1 月 10 日」になります。

于 2010-01-09T22:59:47.920 に答える
6

私のコードからデータ フォーマッタを操作する例をいくつか示します。これらの関数のいずれかを使用して、フォーマットに合わせて微調整できるはずです。

利用方法

NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [Constants getTitleDateFormatter];
NSString *dateString = [dateFormatter stringFromDate:today];        
[dateFormatter release];

機能

+ (NSDateFormatter *) getDateFormatterWithTimeZone {
  //Returns the following information in the format of the locale:
  //YYYY-MM-dd HH:mm:ss z (Z is time zone)
  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setLocale:[NSLocale currentLocale]];
  [dateFormatter setDateStyle:NSDateFormatterShortStyle];
  [dateFormatter setTimeStyle:NSDateFormatterLongStyle];
  return dateFormatter;

}

+ (NSDateFormatter *)dateFormatterWithoutYear {
  NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone];
  [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
  NSString *format = [dateFormatter dateFormat];
  format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""];
  NSRange secondSpace;
  secondSpace.location = format.length-2;
  secondSpace.length = 1;
  format = [format stringByReplacingCharactersInRange:secondSpace withString:@""];
  [dateFormatter setDateFormat:format];
  return dateFormatter;
}

+ (NSDateFormatter *) dateFormatterMonthDayOnly {
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *format = [dateFormatter dateFormat];
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""];
    NSRange range;
    range.location = 0;
    range.length = 3;
    format = [format substringWithRange:range];
    [dateFormatter setDateFormat:format];
    return dateFormatter;
}

+ (NSDateFormatter *) getTitleDateFormatter {
    //Returns the following information in the format of the locale:
    //MM-dd-yyyy hh:mm:ssa
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone];
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
    NSString *format = [dateFormatter dateFormat];
    NSRange secondSpace;
    secondSpace.location = format.length-2;
    secondSpace.length = 1;
    format = [format stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""];
    [dateFormatter setDateFormat:format];   
    return dateFormatter;
}
于 2010-01-09T22:38:58.320 に答える
2

まず、動作を 10.4 に設定してください。私の経験では、よりモダンな方がうまく機能します。

[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];

次に、2 つの異なる文字列表現がある場合、同じ形式を使用して解析と書式設定を行うことはできないため、2 つのフォーマッターを使用するか、解析と書式設定の間で文字列形式を変更します。

また、書式設定オプションも考慮してください。

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

小文字の e は曜日、小文字の d は月の日です。

月には、B ではなく MMMM を使用します。

于 2010-01-09T22:37:30.720 に答える
1

[NSFormatter dateFromString:]文字列ベースの日付をNSDateインスタンスに変換するために使用します。そこから、上で書いた文字列ではなく、 で使用stringFromDateしたいと考えています。NSDate解析とフォーマットの両方に同じ NSDateFormatter を使用するかどうかはわかりません。異なるフォーマット スタイルを処理するには、2 つの別個のインスタンスが必要になる場合があります。

于 2010-01-09T22:30:41.020 に答える