Memformat NSDate menjadi gaya khusus untuk tahun, bulan, hari, dan jam, menit, detik


132

Saya pada dasarnya perlu mendapatkan tanggal dan waktu saat ini secara terpisah, diformat sebagai:

2009-04-26 
11:06:54

Kode di bawah ini, dari pertanyaan lain tentang topik yang sama, dihasilkan

sekarang: | 2009-06-01 23:18:23 +0100 | 
dateString: | 01 Juni 2009 23: 18 | 
parsed: | 2009-06-01 23:18:00 +0100 |

Ini hampir apa yang saya cari, tetapi saya ingin memisahkan hari dan waktu.

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *now = [[NSDate alloc] init];

NSString *dateString = [format stringFromDate:now];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:dateString];

NSLog(@"\n"
"now:        |%@| \n"
"dateString: |%@| \n"
"parsed:     |%@|", now, dateString, parsed);

1
Dalam kasus seperti ini di mana Anda meluangkan waktu untuk menuliskan kode yang akhirnya Anda gunakan untuk menyelesaikan masalah, saya mungkin akan menempelkannya (dalam hal ini semuanya di bawah edit2) dalam jawaban daripada mengedit posting Anda. Bagaimanapun juga bukan hal yang besar, tetapi membuatnya lebih mudah untuk menemukan / melihat bahwa itu adalah solusi untuk pertanyaan itu.
Lawrence Johnston

Jawaban:


72

String format iPhone dalam format Unicode . Di balik tautan adalah tabel yang menjelaskan arti semua huruf di atas sehingga Anda dapat membuatnya sendiri.

Dan tentu saja jangan lupa untuk melepaskan pembuat format tanggal Anda ketika Anda sudah selesai dengan mereka. Kode di atas kebocoran format, nowdan inFormat.


Bocor bahkan dengan ARC diaktifkan?
Dimme

19
Di atas tidak akan ada kebocoran di bawah ARC (tentu saja ARC tidak tersedia pada 2009 ketika kami melakukan diskusi ini).
Rob Napier

194

inilah yang saya gunakan:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];

NSLog(@"\n"
      "theDate: |%@| \n"
      "theTime: |%@| \n"
      , theDate, theTime);

[dateFormat release];
[timeFormat release];
[now release];

12

Anda dapat menggunakan metode ini, cukup kirimkan tanggal Anda ke sana

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"your current date format"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"your desired format"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    NSLog(@"%@", stringFromDate);
    return stringFromDate;
}

11
    NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
    [dateformat setDateFormat:@"Your Date Format"];

atur format untuk kembali adalah ....

yyyy-MM-dd2015-12-17tanggal pengembalian

yyyy-MMM-dd2015-Dec-17tanggal pengembalian

yy-MM-dd15-12-17tanggal pengembalian

dd-MM-yy17-12-15tanggal pengembalian

dd-MM-yyyy17-12-2015tanggal pengembalian

yyyy-MMM-dd HH:mm:ss2015-Dec-17 08:07:13tanggal dan waktu pengembalian

yyyy-MMM-dd HH:mm2015-Dec-17 08:07tanggal dan waktu pengembalian

Untuk lebih jelasnya Format Data dan Waktu untuk Klik Sekarang.

Terima kasih.....


1
Harap berikan deskripsi tambahan beserta contoh kode.
Maciej Lach

Saya memiliki tanggal ini '2018-06-08T07: 30: 05.391Z' saya telah mencoba 'yyyy-MM-dd'T'HH: mm: ss,000Z' tetapi mendapatkan nilai nol.
Pramod Tapaniya

4

tidak ada yang baru tetapi masih ingin membagikan metode saya:

+(NSString*) getDateStringFromSrcFormat:(NSString *) srcFormat destFormat:(NSString *)
destFormat scrString:(NSString *) srcString
{
    NSString *dateString = srcString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //[dateFormatter setDateFormat:@"MM-dd-yyyy"];
    [dateFormatter setDateFormat:srcFormat];
    NSDate *date = [dateFormatter dateFromString:dateString];

    // Convert date object into desired format
    //[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    [dateFormatter setDateFormat:destFormat];
    NSString *newDateString = [dateFormatter stringFromDate:date];
    return newDateString;
}

3

Untuk cepat

var dateString:String = "2014-05-20";
var dateFmt = NSDateFormatter()
// the format you want
dateFmt.dateFormat = "yyyy-MM-dd"
var date1:NSDate = dateFmt.dateFromString(dateString)!;

0

Cepat 3

extension Date {
    
    func toString(template: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)
        return formatter.string(from: self)
    }
    
}

Pemakaian

let now = Date()
let nowStr0 = now.toString(template: "EEEEdMMM") // Tuesday, May 9
let nowStr1 = now.toString(template: "yyyy-MM-dd") // 2017-05-09
let nowStr2 = now.toString(template: "HH:mm:ss") // 17:47:09

Mainkan dengan templat yang sesuai dengan kebutuhan Anda. Contoh dan dokumen di sini untuk membantu Anda membangun templat yang Anda butuhkan.

Catatan

Anda mungkin ingin men-cache Anda DateFormatterjika Anda berencana menggunakannya TableViewmisalnya. Untuk memberikan ide, pengulangan lebih dari 1000 tanggal butuh 0,5 detik menggunakan toString(template: String)fungsi di atas , dibandingkan dengan 0,05 detik menggunakan myFormatter.string(from: Date).


Untuk membuat catatan itu lebih kuat (karena sangat penting), Anda dapat memperbaiki fungsi Anda untuk mengambil parameter opsional dengan nilai default dari instance baru. Saya tidak tahu mengapa Anda tidak dipilih, jadi saya membatalkannya.
Vive

-6
NSDate *date         = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"]
NSString *dateString  = [df stringFromDate:date];
[df setDateFormat:@"hh:mm:ss"];
NSString *hoursString = [df stringFromDate:date];

Itu saja, Anda mendapatkan semua yang Anda inginkan.

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.