Bagaimana cara mendapatkan jam dan menit dari NSDate?


113

Dalam aplikasi saya, saya perlu mendapatkan jam dan menit secara terpisah:

NSString *currentHour=[string1 substringWithRange: NSMakeRange(0,2)];
        int currentHourInNumber=[currentHour intValue];

Pertimbangkan string1mengandung 11:59:13 AMyang datang dari datepicker.

Di sini jika saya menggunakan kode di atas, tidak mengapa mendapatkan jam jika lebih dari 9. Lain saya perlu mengubah NSMakeRange(0,1)untuk mendapatkan jam antara 1 hingga 9.

Apakah ada metode untuk mendapatkan jam, menit, dll?

Terima kasih sebelumnya, berikan saya kode sampel.


Jawaban:


262

Gunakan NSDateFormatter untuk mengubahnya string1menjadi NSDate, lalu dapatkan NSDateComponents yang diperlukan :

Obj-C :

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"<your date format goes here"];
NSDate *date = [dateFormatter dateFromString:string1];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
NSInteger hour = [components hour];
NSInteger minute = [components minute];

Swift 1 dan 2 :

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "Your date Format"
let date = dateFormatter.dateFromString(string1)
let calendar = NSCalendar.currentCalendar()
let comp = calendar.components([.Hour, .Minute], fromDate: date)
let hour = comp.hour
let minute = comp.minute

Cepat 3 :

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "Your date Format"
let date = dateFormatter.date(from: string1)
let calendar = Calendar.current
let comp = calendar.dateComponents([.hour, .minute], from: date)
let hour = comp.hour
let minute = comp.minute

Lebih lanjut tentang dateformat adalah di situs unicode resmi


Hai Satu keraguan lagi, apakah mungkin mengubah jam, menit di NSDate
mac

Untuk mengubah jam dan menit, mungkin lihat ke + dateWithTimeIntervalSinceReferenceDate NSDate :. Metode itu memungkinkan Anda menambahkan jumlah detik tertentu hingga saat ini (dan mengembalikan tanggal baru).
Thomas Müller

Di iOS, "komponen" hanya tersedia sejak versi 8.0. Bagaimana dengan <8.0?
Rhuantavan

2
@Rhuantavan developer.apple.com/library/ios/documentation/Cocoa/Reference/… : "Tersedia di iOS 2.0 dan yang lebih baru." Saya pasti telah menggunakan API ini selama bertahun-tahun.
Thomas Müller

Saya kira ini adalah bug di XCode karena melaporkan ini menjadi 8.0. Saya harus memeriksa sumber atau dokumen online. Salahku.
Rhuantavan

52

Jika Anda hanya membutuhkannya untuk menyajikan sebagai string, kode berikut jauh lebih mudah

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

NSString *startTimeString = [formatter stringFromDate:startTimePicker.date];

45

Menurut saya, inilah pertanyaannya, tidak perlu pemformat:

NSDate *date = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
NSInteger hour = [components hour];
NSInteger minute = [components minute];

1
Bagaimana cara mendapatkan AM atau PM?
Yalamandarao


4

Jika Anda menggunakan pustaka C maka ini bisa dilakukan:

time_t t;
struct tm * timeinfo;

time (&t);
timeinfo = localtime (&t);

NSLog(@"Hour: %d Minutes: %d", timeinfo->tm_hour, timeinfo->tm_min);

Dan menggunakan Swift:

var t = time_t()
time(&t)
let x = localtime(&t)

println("Hour: \(x.memory.tm_hour) Minutes: \(x.memory.tm_min)")

Untuk panduan lebih lanjut lihat: http://www.cplusplus.com/reference/ctime/localtime/


4

Dengan iOS 8, Apple memperkenalkan metode pembantu untuk mengambil hour, minute, seconddan nanoseconddari objek NSDate.

Objective-C

NSDate *date = [NSDate currentDate];
NSInteger hour = 0;
NSInteger minute = 0;
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
[currentCalendar getHour:&hour minute:&minute second:NULL nanosecond:NULL fromDate:date];
NSLog(@"the hour is %ld and minute is %ld", (long)hour, (long)minute);

Cepat

let date = NSDate()
var hour = 0
var minute = 0
let calendar = NSCalendar.currentCalendar()
if #available(iOS 8.0, *) {
    calendar.getHour(&hour, minute: &minute, second: nil, nanosecond: nil, fromDate: date)
    print("the hour is \(hour) and minute is \(minute)")
}

3

Swift 2.0

Anda dapat melakukan hal-hal berikut untuk mendapatkan jam dan menit dari sebuah tanggal:

let dateFromat = NSDateFormatter()
dateFromat.dateFormat = "hh:mm a"
let date = dateFromat.dateFromString(string1) // In your case its string1
print(date) // you will get - 11:59 AM

Gunakan NSDateFormatter untuk detail singkat.
yo2bh

2

Swift 2.0

    let dateNow = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let hour = calendar.component(NSCalendarUnit.Hour, fromDate: dateNow)
    let minute = calendar.component(NSCalendarUnit.Minute, fromDate: dateNow)
    print(String(hour))
    print(String(minute))

Harap perhatikan cast ke String di pernyataan cetak, Anda dapat dengan mudah menetapkan nilai itu ke variabel, seperti ini:

var hoursString = String(hour)
var minutesString = String(minute)

Kemudian Anda dapat menggabungkan nilai seperti ini:

var compoundString = "\(hour):\(minute)"
print(compoundString)
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.