Wie bekomme ich Stunden und Minuten von NSDate?


113

In meiner Bewerbung muss ich Stunde und Minute getrennt abrufen:

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

Betrachten Sie string1enthält, 11:59:13 AMwas von Datepicker kommt.

Wenn ich den obigen Code verwende, ist es in Ordnung, eine Stunde zu erhalten, wenn sie größer als 9 ist. Andernfalls muss ich mich ändern NSMakeRange(0,1), um eine Stunde zwischen 1 und 9 zu erhalten.

Gibt es Methoden, um die Stunde, Minuten usw. zu ermitteln?

Vielen Dank im Voraus, bitte geben Sie mir einen Beispielcode.


Antworten:


262

Verwenden Sie einen NSDateFormatter , um string1in einen zu konvertieren NSDate, und rufen Sie dann die erforderlichen NSDateComponents ab :

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 und 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

Swift 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

Weitere Informationen zum Datumsformat finden Sie auf der offiziellen Unicode-Website


Hallo Noch ein Zweifel, ist es möglich, die Stunde, Minute in NSDate
Mac

Um die Stunde und Minute zu ändern, schauen Sie sich vielleicht das + dateWithTimeIntervalSinceReferenceDate: von NSDate an. Mit dieser Methode können Sie eine bestimmte Anzahl von Sekunden zum Datum hinzufügen (und ein neues Datum zurückgeben).
Thomas Müller

Unter iOS sind "Komponenten" erst seit Version 8.0 verfügbar. Wie wäre es mit <8,0?
Rhuantavan

2
@Rhuantavan developer.apple.com/library/ios/documentation/Cocoa/Reference/… : "Verfügbar in iOS 2.0 und höher." Ich benutze diese API definitiv seit Jahren.
Thomas Müller

Ich denke, es ist ein Fehler in XCode, da dies als 8.0 gemeldet wurde. Ich hätte die Quellen oder Online-Dokumente überprüfen sollen. Mein Fehler.
Rhuantavan

52

Wenn Sie es nur zur Darstellung als Zeichenfolge benötigen, ist der folgende Code viel einfacher

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

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

45

Dies scheint mir die Frage zu sein, nach der keine Formatierer benötigt werden:

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
Wie bekomme ich AM oder PM?
Yalamandarao


4

Wenn Sie die C-Bibliothek verwenden, können Sie Folgendes tun:

time_t t;
struct tm * timeinfo;

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

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

Und mit Swift:

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

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

Weitere Anleitungen finden Sie unter: http://www.cplusplus.com/reference/ctime/localtime/


4

Mit iOS 8, Apple eine Hilfsmethode eingeführt das zurückzuholen hour, minute, secondundnanosecond von einem NSDate Objekt.

Ziel 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);

Schnell

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

Sie können Folgendes tun, um Stunden und Minuten von einem Datum zu erhalten:

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

Verwenden Sie NSDateFormatter für kurze Details.
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))

Bitte beachten Sie die Umwandlung in String in der print-Anweisung. Sie können diesen Wert einfach Variablen wie folgt zuweisen:

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

Dann können Sie Werte wie folgt verketten:

var compoundString = "\(hour):\(minute)"
print(compoundString)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.