Saya mendapat jumlah seconds
yang lulus dari acara tertentu. Ini disimpan dalam NSTimeInterval
tipe data.
Saya ingin mengubahnya menjadi minutes
dan seconds
.
Misalnya saya punya: "326.4" detik dan saya ingin mengubahnya menjadi string berikut: "5:26".
Apa cara terbaik untuk mencapai tujuan ini?
Terima kasih.
objective-c
iphone
nstimeinterval
seconds
minute
Ilya Suzdalnitski
sumber
sumber
Deskripsi singkat
Gunakan metode NSCalendar:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
"Pengembalian, sebagai objek NSDateComponents menggunakan komponen tertentu, perbedaan antara dua tanggal yang disediakan". Dari dokumentasi API.
Buat 2 NSDate yang perbedaannya adalah NSTimeInterval yang ingin Anda ubah. (Jika NSTimeInterval Anda berasal dari membandingkan 2 NSDate, Anda tidak perlu melakukan langkah ini, dan Anda bahkan tidak memerlukan NSTimeInterval).
Dapatkan kutipan Anda dari NSDateComponents
Kode sampel
Masalah Dikenal
sumber
%ld
jika Anda berada di mesin 64 bit.Semua ini terlihat lebih rumit dari yang seharusnya! Berikut adalah cara singkat dan manis untuk mengubah interval waktu menjadi jam, menit, dan detik:
Perhatikan ketika Anda meletakkan float ke dalam int, Anda mendapatkan floor () secara otomatis, tetapi Anda dapat menambahkannya ke dua yang pertama jika membuat Anda merasa lebih baik :-)
sumber
Maafkan saya karena saya masih perawan Stack ... Saya tidak yakin bagaimana membalas jawaban Brian Ramsay ...
Penggunaan round tidak akan berhasil untuk nilai kedua antara 59.5 dan 59.99999. Nilai kedua akan menjadi 60 selama periode ini. Gunakan trunc sebagai gantinya ...
sumber
Jika Anda menargetkan pada atau di atas iOS 8 atau OS X 10.10, ini menjadi jauh lebih mudah. Kelas baru
NSDateComponentsFormatter
memungkinkan Anda mengonversi yang diberikanNSTimeInterval
dari nilainya dalam hitungan detik menjadi string yang dilokalkan untuk ditunjukkan kepada pengguna. Sebagai contoh:Objective-C
Cepat
NSDateCompnentsFormatter
juga memungkinkan keluaran ini dalam bentuk yang lebih panjang. Info lebih lanjut dapat ditemukan di artikel NSFormatter NSHipster . Dan bergantung pada kelas apa yang sudah Anda kerjakan (jika tidakNSTimeInterval
), mungkin lebih mudah untuk meneruskan pemformat sebuah instanceNSDateComponents
, atau duaNSDate
objek, yang dapat dilakukan juga melalui metode berikut.Objective-C
Cepat
sumber
switch
atauif else
pernyataan dengan ini.NSDateComponentsFormatter
mengurus semuanya. Jam, Menit, Detik dicetak tanpa khawatir.Kode Brian Ramsay, de-pseudofied:
sumber
Ini versi Swift:
Bisa digunakan seperti ini:
sumber
Keluaran:
sumber
Karena pada dasarnya ini adalah ...
Bagilah dengan 60.0 dan ekstrak bagian integral dan bagian pecahannya.
Bagian integral adalah bilangan bulat menit.
Kalikan kembali bagian pecahannya dengan 60,0.
Hasilnya adalah detik-detik yang tersisa.
sumber
Ingatlah bahwa pertanyaan awal adalah tentang keluaran string, bukan pseudo-code atau komponen string individual.
Banyak jawaban yang hilang dari masalah internasionalisasi, dan kebanyakan melakukan perhitungan matematika dengan tangan. Semua hanya abad ke-20 ...
Jangan lakukan Matematika sendiri (Swift 4)
Memanfaatkan perpustakaan
Jika Anda benar-benar menginginkan komponen individual, dan kode yang mudah dibaca, lihat SwiftDate :
Kredit ke @mickmaccallum dan @polarwar untuk penggunaan yang memadai dari
DateComponentsFormatter
sumber
Bagaimana saya melakukan ini di Swift (termasuk pemformatan string untuk menunjukkannya sebagai "01:23"):
sumber
Versi Swift 2
sumber