Konversi NSDate ke NSString


Jawaban:


468

Bagaimana tentang...

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
Ini akan menghasilkan kebocoran memori, karena formatter tidak pernah dirilis.
— mana

6
Jangan gunakan initdengan NSDateFormatter. Itu dihapus setelah iOS 3.2 . (Dan jika Anda menggunakan metode kelas sebagai gantinya, itu akan autorelease dan Anda tidak akan memiliki masalah kebocoran juga.)
— zekel

3
Benar-benar menyarankan melihat di bawah ini di localizedStringFromDate
— Oded Ben Dov

4
@ zekel Saya tidak yakin apa yang digunakan untuk mengatakan dokumentasi, tapi sekarang ini menunjukkan initdi beberapa tempat.
— Neal Ehardt

2
Saya akan autoreleased itu (3 tahun yang lalu)
— Adam Waite

283

Saya tidak tahu bagaimana kita semua melewatkan ini: localizedStringFromDate: dateStyle: timeStyle:

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

keluaran '13 / 06/12 00:22:39 GMT + 03: 00 '


Setelah ditulis ke sebuah string, apakah ada cara yang bagus dan rapi untuk membacanya seperti ini? (menggunakan enums NSDateFormatter)
— Fonix

@Fonix Saya tidak berpikir begitu - ini adalah string terlokalisasi, yang berarti itu tergantung pada pengaturan lokal pengguna. Anda tidak boleh menyimpan tanggal dalam format seperti ini karena pengaturan dapat berubah kapan saja.
— Viktor Benei

Sangat menyenangkan jika Anda menggunakan formatter langka. Kalau tidak, Anda perlu cache.
— Mike Glukhov

Dalam cepat: biarkan dateString = NSDateFormatter.localizedStringFromDate (date, dateStyle: .ShortStyle, timeStyle: .FullStyle);
— Cristan

1
Mengurangi jumlah kode dan mengucapkan terima kasih atas kerjanya yang sempurna
— Preetha

87

Berharap untuk menambah nilai lebih dengan menyediakan formatter normal termasuk tahun, bulan, dan hari dengan waktu. Anda dapat menggunakan formatter ini selama lebih dari satu tahun

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

24

ada sejumlah NSDatepembantu di web, saya cenderung menggunakan:

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

Ekstrak Readme di bawah ini:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

Ini menghasilkan jenis-jenis output berikut:

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

Ini jelas merupakan solusi yang bagus. Tidak perlu membuang waktu untuk mengkhawatirkan bagaimana penampilan kencan Anda, dan bisa melanjutkan dengan pengkodean. :)
— kyleturner

13

Dalam Swift:

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

Di Swift 3.0 biarkan formatter = DateFormatter () formatter.dateFormat = "yyyy" return formatter.string (dari: 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" memberikan tahun untuk minggu ini bukan hari. Gunakan "yyyy" sebagai gantinya. Lihat pertanyaan SO ini untuk info lebih lanjut. stackoverflow.com/questions/15133549/...
— Steve Moser

Terima kasih Steve moser :)
— SR Nayak

4

Jika Anda tidak memiliki NSDate -descriptionWithCalendarFormat:timeZone:locale:(saya tidak percaya iPhone / Cocoa Touch termasuk ini) Anda mungkin perlu menggunakan strftime dan monyet sekitar dengan beberapa string C-style. Anda bisa mendapatkan cap waktu UNIX dari NSDatemenggunakan 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

Cukup tambahkan ekstensi ini:

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

2

Jika Anda menggunakan Mac OS X, Anda dapat menulis:

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

Namun ini tidak tersedia di iOS.


1

cepat 4 jawaban

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

Tentukan utilitas Anda sendiri untuk memformat tanggal Anda format tanggal yang diperlukan untuk misalnya.

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

0

Ini format cepat:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.