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.