Comment puis-je obtenir des heures et des minutes de NSDate?


113

Dans mon application, j'ai besoin d'obtenir l'heure et les minutes séparément:

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

Considérez string1contient 11:59:13 AMqui provient de datepicker.

Ici, si j'utilise le code ci-dessus, il est normal d'obtenir l'heure si elle est supérieure à 9. Sinon, je dois changer NSMakeRange(0,1)pour obtenir l'heure entre 1 et 9.

Existe-t-il des méthodes pour obtenir l'heure, les minutes, etc.?

Merci d'avance, veuillez me fournir un exemple de code.


Réponses:


262

Utilisez un NSDateFormatter pour convertir string1en un NSDate, puis obtenez les NSDateComponents requis :

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

Plus d'informations sur le format de date sur le site officiel Unicode


Salut Encore un doute, est-il possible de changer l'heure, la minute dans NSDate
mac

Pour changer l'heure et les minutes, regardez peut-être dans NSDate + dateWithTimeIntervalSinceReferenceDate :. Cette méthode vous permet d'ajouter un nombre spécifique de secondes à ce jour (et de renvoyer une nouvelle date).
Thomas Müller

Sur iOS, "composants" n'est disponible que depuis la version 8.0. Que diriez-vous de <8,0?
Rhuantavan

2
@Rhuantavan developer.apple.com/library/ios/documentation/Cocoa/Reference/… : "Disponible dans iOS 2.0 et versions ultérieures." J'utilise définitivement cette API depuis des années.
Thomas Müller

Je suppose que c'est un bogue dans XCode car il signalait que c'était 8.0. J'aurais dû vérifier les sources ou les documents en ligne. Ma faute.
Rhuantavan

52

Si vous n'en avez besoin que pour présenter sous forme de chaîne, le code suivant est beaucoup plus simple

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

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

45

Cela me semble être la question après, pas besoin de formateurs:

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
Comment obtenir AM ou PM?
Yalamandarao le


4

Si vous deviez utiliser la bibliothèque C, cela pourrait être fait:

time_t t;
struct tm * timeinfo;

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

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

Et en utilisant Swift:

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

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

Pour plus d'informations, voir: http://www.cplusplus.com/reference/ctime/localtime/


4

Avec iOS 8, Apple a introduit une méthode d'aide pour récupérer le hour, minute, secondet nanosecondd'un objet NSDate.

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

Rapide

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

Vous pouvez faire la chose suivante pour obtenir des heures et des minutes à partir d'une date:

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

Utilisez NSDateFormatter pour de brefs détails.
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))

Veuillez prendre note de la conversion en String dans l'instruction d'impression, vous pouvez facilement affecter cette valeur à des variables, comme ceci:

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

Ensuite, vous pouvez concaténer des valeurs comme ceci:

var compoundString = "\(hour):\(minute)"
print(compoundString)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.