258

@ "yyyy"形式の年のみが文字列に出力されるようNSDateに変換するにはどうすればよいですか?NSString

4

19 に答える 19

472

どうですか...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

//unless ARC is active
[formatter release];

スウィフト 4.2 :

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}
于 2009-05-30T22:38:51.787 に答える
284

これを見逃した理由はわかりません: localizedStringFromDate:dateStyle:timeStyle:

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                      dateStyle:NSDateFormatterShortStyle 
                                                      timeStyle:NSDateFormatterFullStyle];
NSLog(@"%@",dateString);

「13/06/12 00:22:39 GMT+03:00」を出力します

于 2012-06-12T21:24:22.360 に答える
87

年、月、日を時刻とともに含む通常のフォーマッタを提供することで、より多くの価値を追加したいと考えています。このフォーマッターは 1 年以上使用できます

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 
于 2011-01-11T23:16:06.523 に答える
25

ウェブ上には多くのNSDateヘルパーがあり、私はよく使用します:

https://github.com/billymeltdown/nsdate-helper/

以下の Readme の抜粋:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

これにより、次の種類の出力が生成されます。

‘3:42 AM’ – if the date is after midnight today
‘Tuesday’ – if the date is within the last seven days
‘Mar 1’ – if the date is within the current calendar year
‘Mar 1, 2008’ – else ;-)
于 2011-05-05T21:52:57.100 に答える
8
  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);
于 2014-09-16T12:37:37.740 に答える
5
+(NSString*)date2str:(NSDate*)myNSDateInstance onlyDate:(BOOL)onlyDate{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if (onlyDate) {
        [formatter setDateFormat:@"yyyy-MM-dd"];
    }else{
        [formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    }

    //Optionally for time zone conversions
    //   [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

    NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];
    return stringFromDate;
}

+(NSDate*)str2date:(NSString*)dateStr{
    if ([dateStr isKindOfClass:[NSDate class]]) {
        return (NSDate*)dateStr;
    }

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateStr];
    return date;
}
于 2015-08-11T09:01:00.393 に答える
5

この拡張機能を追加するだけです:

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}
于 2016-03-18T11:13:33.293 に答える
2

Mac OS X を使用している場合は、次のように記述できます。

NSString* s = [[NSDate date] descriptionWithCalendarFormat:@"%Y_%m_%d_%H_%M_%S" timeZone:nil locale:nil];

ただし、これは iOS では使用できません。

于 2012-02-10T14:20:01.273 に答える
1

extension明確なコードを持つために使用します


拡張機能を作成して、任意のDateオブジェクトを任意のカレンダーおよび任意の形式に変換できます

extension Date{
    func asString(format: String = "yy/MM/dd HH:mm",
                  for identifier: Calendar.Identifier = .persian) -> String {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: identifier)
        formatter.dateFormat = format
        
        return formatter.string(from: self)
    }
}

次に、次のように使用します。

let now = Date()

print(now.asString())  // prints -> 00/04/18 20:25
print(now.asString(format: "yyyy/MM/dd"))  // prints -> 1400/04/18
print(now.asString(format: "MM/dd", for: .gregorian))  //  prints -> 07/09  

目的のフォーマット文字列を指定する方法については、このリンクを参照してください。
日付をフォーマットする方法の完全なリファレンスについては、Appleの公式日付フォーマット ガイドを参照 してください

于 2021-07-09T16:10:23.913 に答える
0
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:myNSDateInstance];
NSInteger year = [components year];
// NSInteger month = [components month];
NSString *yearStr = [NSString stringWithFormat:@"%ld", year];
于 2016-03-27T00:16:46.970 に答える
0

iOS 15 のアップデート

.formattediOS 15 では、明示的な を使用せずにDateオブジェクトを直接呼び出すことがサポートされるようになりましたDateFormatter

一般的なフォーマットの例

ドキュメンテーション

date.formatted() // 6/8/2021, 7:30 PM
date.formatted(date: .omitted, time: .complete) // 19:30
date.formatted(date: .omitted, time: .standard) // 07:30 PM
date.formatted(date: .omitted, time: .shortened) // 7:30 PM
date.formatted(date: .omitted, time: .omitted)

代替構文

ドキュメンテーション

// We can also specify each DateComponent separately by chaining modifiers.
date.formatted(.dateTime.weekday(.wide).day().month().hour().minute())
// Tuesday, Jun 8, 7:30 pm

// Answer to specific question
date.formatted(.dateTime.year())
于 2021-06-10T14:58:26.760 に答える