2010-05-28 16 views
102

In meiner Anwendung muss ich separat die Stunde und Minute bekommen:Wie bekomme ich Stunden und Minuten von NSDate?

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

Betrachten string111:59:13 AM enthält, die aus picker kommt.

hier, wenn ich oben Code verwenden, ist es in Ordnung Stunde zu bekommen, wenn es größer ist als 9. Else Ich brauche NSMakeRange(0,1) zu ändern Stunde zwischen 1 bis 9.

zu erhalten Gibt es Methoden, um die Stunde zu bekommen, Minuten , etc?

Vielen Dank im Voraus, bitte geben Sie mir Beispielcode.

+0

Mögliches Duplikat von [Wie bekomme ich die Stunde des Tages mit Swift?] (Https://stackoverflow.com/questions/24137692/how-to-get-the-hour-of-the-day-with-swift) –

Antwort

238

Verwenden string1 ein NSDateFormatter umwandeln in eine NSDate, dann ist die NSDateComponents erforderlich erhalten:

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 

Mehr zu den dateformat ist auf der offiziellen Unicode-Website

+0

danke Thomas das ist was genau suche ich – mac

+0

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

+0

ändern Um die Stunde und Minute zu ändern, schauen Sie vielleicht in NSDate + dateWithTimeIntervalSinceReferenceDate :. Mit dieser Methode können Sie eine bestimmte Anzahl von Sekunden bis zum aktuellen Datum hinzufügen (und ein neues Datum zurückgeben). –

45

Wenn Sie es nur für präsentiert als String ist der folgende Code viel einfacher

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

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

Perfekt und kurz! –

42

Dies scheint mir zu sein, was die Frage nach ist, keine Notwendigkeit für Formatierer:

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

Gibt es einen Grund, warum Sie NSInteger-Zeiger verwenden, um die Werte bestimmter Komponenten zu speichern? Ich denke 'NSInteger Stunde = [Komponenten Stunde]; NSInteger Minute = [Komponenten Minute]; ' wäre genug? – Toolism

+0

Danke. Korrigiert. – HenryRootTwo

+0

Wie bekomme ich AM oder PM? – Singapore

3

Wenn Sie die C-Bibliothek verwenden, wurden dann dies geschehen könnte:

time_t t; 
struct tm * timeinfo; 

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

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

Und mit:

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

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

Für weitere Hinweise siehe: http://www.cplusplus.com/reference/ctime/localtime/

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 nehmen Sie zur Kenntnis, die Besetzung zu String in der print-Anweisung, können Sie einfach diesen Wert Variablen zuweisen, wie folgt aus:

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

Dann können Sie Werte wie folgt verketten:

var compoundString = "\(hour):\(minute)" 
print(compoundString) 
4

Mit iOS 8 führte Apple eine Hilfsmethode, die hour, minute, second abrufen und nanosecond aus ein NSDate-Objekt.

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

Swift

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 tun können folgende Sache von einem Datum Stunden und Minuten zu bekommen:

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 
+0

Verwenden Sie [NSDateFormatter] (http://www.codingexplorer.com/swiftly-getting-human-readable-date-nsdateformatter/) für kurze Details. –

+0

Das korrekte Format ist einzeln 'h: mm a' –

Verwandte Themen