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.

Mac
sumber
Kemungkinan duplikat dari Bagaimana mendapatkan jam hari ini dengan Swift?
J-Dizzle

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

Thomas Müller
sumber
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];
Gil Margolin
sumber
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];
HenryRootTwo
sumber
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/

sketchyTech
sumber
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)")
}
newDeveloper
sumber
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
yo2bh
sumber
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)
Juan Boero
sumber