NSDateをNSStringに変換する


回答:


468

どう...

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];

Swift 4.2:

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}

24
フォーマッタはリリースされないため、これによりメモリリークが発生します。
mana

6
initと一緒に使用しないでくださいNSDateFormatteriOS 3.2以降削除されました。(そして、代わりにクラスメソッドを使用すると、自動解放され、リークの問題も発生しません。)
zekel

3
本当に以下のローカライズされた
StringFromDate

4
@zekelドキュメントが何を言っていたのかはわかりませんが、今ではinit複数の場所で示唆されています。
Neal Ehardt、2012

2
私はそれを自動リリースしました(3年前)
アダムウェイト

283

私たち全員がこれをどのようにして見逃していたのかわかりません。localizedStringFromDate:dateStyle:timeStyle:

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

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


文字列に書き出された後、このようにそれを読み取るための素晴らしい方法はありますか?(これらのNSDateFormatter列挙型を使用)
Fonix 2013年

@Fonix私はそうは思いません-これはローカライズされた文字列です。つまり、ユーザーのロケール設定に依存します。設定はいつでも変更される可能性があるため、このような形式で日付を保存しないでください。
Viktor Benei、2014年

まれにフォーマッターを使えばいいですね。それ以外の場合は、キャッシュが必要です。
Mike Glukhov、2015年

swift:let dateString = NSDateFormatter.localizedStringFromDate(date、dateStyle:.ShortStyle、timeStyle:.FullStyle);
2016

1
コードの数を減らし、その完全な機能に感謝
Preetha

87

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

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

24

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 ;-)

これは間違いなく素晴らしいソリューションです。日付がどのように見えるかを心配する時間を無駄にする必要はなく、コーディングを続行できます。:)
kyleturner

13

Swiftの場合:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy"
var dateString = formatter.stringFromDate(YourNSDateInstanceHERE)

Swift 3.0では、formatter = DateFormatter()formatter.dateFormat = "yyyy"がformatter.string(from:date)を返す
Victor Laerte

8
  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);

1
「YYYY」は、日ではなく現在の週の年を示します。代わりに「yyyy」を使用してください。詳細については、このSOの質問を参照してください。stackoverflow.com/questions/15133549/...
スティーブ・モーザー

Steve moserに感謝します:)
SR Nayak

4

NSDate -descriptionWithCalendarFormat:timeZone:locale:利用できない場合(iPhone / Cocoa Touchに含まれているとは思わない)、いくつかのCスタイルの文字列でstrftimeとmonkeyを使用する必要がある場合があります。NSDateを使用してUNIXタイムスタンプを取得できますNSDate -timeIntervalSince1970


4
+(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;
}

3

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

extension NSDate {
    var stringValue: String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yourDateFormat"
        return formatter.stringFromDate(self)
    }
}

2

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

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

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


1

迅速な4答え

static let dateformat: String = "yyyy-MM-dd'T'HH:mm:ss"
public static func stringTodate(strDate : String) -> Date
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    let date = dateFormatter.date(from: strDate)
    return date!
}
public static func dateToString(inputdate : Date) -> String
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    return formatter.string(from: inputdate)

}

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];

0

たとえば、日付の必要な日付形式をフォーマットするための独自のユーティリティを定義します。

NSString * stringFromDate(NSDate *date)  
 {   NSDateFormatter *formatter
    [[NSDateFormatter alloc] init];  
    [formatter setDateFormat:@"MM ∕ dd ∕ yyyy, hh꞉mm a"];    
    return [formatter stringFromDate:date]; 
}

0

それは迅速な形式です:

func dateFormatterWithCalendar(calndarIdentifier: Calendar.Identifier, dateFormat: String) -> DateFormatter {

    let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: calndarIdentifier)
    formatter.dateFormat = dateFormat

    return formatter
}


//Usage
let date = Date()
let fotmatter = dateFormatterWithCalendar(calndarIdentifier: .gregorian, dateFormat: "yyyy")
let dateString = fotmatter.string(from: date)
print(dateString) //2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.