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);
bcsantos
sumber
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.

Rob Napier
sumber
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];
bcsantos
sumber
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;
}
guru
sumber
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.....

PT Vyas
sumber
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;
}
gndp
sumber
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)!;

sumber
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).

kemari
sumber
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.

Nikesh K
sumber