Menetapkan
func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
Menggunakan
> secondsToHoursMinutesSeconds(27005)
(7,30,5)
atau
let (h,m,s) = secondsToHoursMinutesSeconds(27005)
Fungsi di atas menggunakan tuple Swift untuk mengembalikan tiga nilai sekaligus. Anda merusak tuple menggunakanlet (var, ...)
sintaks atau dapat mengakses setiap anggota tupel, jika perlu.
Jika Anda benar-benar perlu mencetaknya dengan kata-kata Hours
dll, maka gunakan sesuatu seperti ini:
func printSecondsToHoursMinutesSeconds (seconds:Int) -> () {
let (h, m, s) = secondsToHoursMinutesSeconds (seconds)
print ("\(h) Hours, \(m) Minutes, \(s) Seconds")
}
Perhatikan bahwa implementasi secondsToHoursMinutesSeconds()
karya di atas untuk Int
argumen. Jika Anda menginginkan Double
versi, Anda harus memutuskan apa nilai pengembaliannya - bisa (Int, Int, Double)
atau bisa jadi (Double, Double, Double)
. Anda dapat mencoba sesuatu seperti:
func secondsToHoursMinutesSeconds (seconds : Double) -> (Double, Double, Double) {
let (hr, minf) = modf (seconds / 3600)
let (min, secf) = modf (60 * minf)
return (hr, min, 60 * secf)
}
(seconds % 3600) % 60
dapat dioptimalkan untukseconds % 60
. Tidak perlu mengekstrak jam pertama.printSecondstoHoursMinutesSeconds()
tidak mengembalikan apa pun (lihat-> ()
tipe pengembalian dalam deklarasi fungsi). Fungsi mencetak sesuatu; yang tidak muncul di Playground. Jika Anda ingin mengembalikan sesuatu, ucapkan aString
lalu hilangkanprintln()
panggilan dan perbaiki jenis pengembalian fungsi.Int
jenis karena sifat/
dan%
fungsinya. Itu adalah/
bagian faksi. Kode yang sama tidak akan berfungsi untukDouble
. Khususnya 2 == 13/5 tetapi 2.6 == 13.0 / 5. Karenanya Anda akan memerlukan implementasi yang berbeda untukDouble
. Saya telah memperbarui jawaban saya dengan catatan tentang ini.Di macOS 10.10+ / iOS 8.0+
(NS)DateComponentsFormatter
telah diperkenalkan untuk membuat string yang dapat dibaca.Ini mempertimbangkan lokal dan bahasa pengguna.
Gaya unit yang tersedia adalah
positional
,abbreviated
,short
,full
,spellOut
danbrief
.Untuk informasi lebih lanjut silakan baca dokumentasi .
sumber
formatter.unitsStyle = .positional
memberi apa yang saya inginkan (yaitu7:30:05
)! Jawaban terbaik IMOhours * 3600 + minutes * 60
Membangun berdasarkan jawaban Vadian , saya menulis ekstensi yang mengambil
Double
(yangTimeInterval
merupakan jenis alias) dan meludahkan string yang diformat sebagai waktu.Berikut adalah beberapa
DateComponentsFormatter.UnitsStyle
pilihan:sumber
Doubles
di Swift.formatter.zeroFormattingBehavior = .pad
. Ini akan memberi kita:3660.asString(style: .positional) // 01:01:00
Saya telah membangun kumpulan jawaban yang ada untuk menyederhanakan semuanya dan mengurangi jumlah kode yang diperlukan untuk Swift 3 .
Pemakaian:
Cetakan:
00:01:40
sumber
Berikut ini adalah pendekatan yang lebih terstruktur / fleksibel: (Swift 3)
Memiliki pendekatan seperti ini memungkinkan penambahan parsing kenyamanan seperti ini:
Perlu dicatat bahwa pendekatan murni bilangan bulat tidak memperhitungkan hari / detik. Jika use case berurusan dengan tanggal / waktu nyata Tanggal dan Kalender harus digunakan.
sumber
month
ke implementasi Anda? Terima kasih sebelumnya!return number < 10 ? "0\(number)" : "\(number)"
dengan menggunakan formatter stringreturn String(format: "%02d", number)
yang secara otomatis menambahkan nol ketika jumlahnya di bawah 10Dalam Swift 5:
Untuk memanggil fungsi
Akan kembali 02:44:57
sumber
Cepat 4
sumber
Berikut ini adalah implementasi sederhana lainnya di Swift3.
sumber
Solusi SWIFT 3.0 didasarkan pada yang di atas menggunakan ekstensi.
Gunakan dengan AVPlayer menyebutnya seperti ini?
sumber
Saya telah menjawab pertanyaan serupa , namun Anda tidak perlu menampilkan milidetik dalam hasilnya. Karenanya solusi saya membutuhkan iOS 10.0, tvOS 10.0, watchOS 3.0 atau macOS 10.12.
Anda harus menelepon
func convertDurationUnitValueToOtherUnits(durationValue:durationUnit:smallestUnitDuration:)
dari jawaban yang sudah saya sebutkan di sini:sumber
Swift 5:
Pemakaian:
sumber
Menurut jawaban GoZoner saya telah menulis Ekstensi untuk mendapatkan waktu yang diformat sesuai dengan jam, menit, dan detik:
sumber
Inilah yang saya gunakan untuk Pemutar Musik saya di Swift 4+. Saya mengkonversi detik Int ke format String yang dapat dibaca
Gunakan seperti ini:
Keluaran:
2:11:43
sumber
Jawaban dari @ r3dm4n sangat bagus. Namun, saya juga perlu satu jam di dalamnya. Untuk berjaga-jaga jika ada orang lain yang membutuhkannya di sini:
sumber
Kode Terbaru: XCode 10.4 Swift 5
sumber
Swift 5 & String Response, Dalam format yang rapi
Pemakaian:
sumber
Cara termudah:
sumber
ld
untuk double, bukand
untuk int.NSTimeInterval
adalahDouble
lakukan dengan ekstensi. Contoh:sumber
Saya pergi ke depan dan membuat penutupan untuk ini (dalam Swift 3).
Ini akan memberikan m = 4 dan s = 59. Jadi Anda dapat memformat sesuai keinginan. Anda tentu saja ingin menambahkan jam juga, jika tidak ada informasi lebih lanjut.
sumber
Swift 4 Saya menggunakan ekstensi ini
penggunaan
sumber
jawaban neek tidak benar.
ini versi yang benar
sumber
Cara lain akan mengkonversi detik ke tanggal dan mengambil komponen yaitu detik, menit dan jam dari tanggal itu sendiri. Solusi ini memiliki batasan hanya hingga 23:59:59
sumber