NSDate'ten nasıl saat ve dakika alabilirim?


113

Başvurumda saat ve dakikayı ayrı ayrı almam gerekiyor:

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

Datepicker'dan gelen string1içeriği düşünün 11:59:13 AM.

Burada yukarıdaki kodu kullanırsam, 9'dan büyükse saat elde etmekte sorun yoktur. Aksi takdirde NSMakeRange(0,1)saati 1 ile 9 arasında değiştirmem gerekir .

Saati, dakikayı vs. almanın herhangi bir yöntemi var mı?

Şimdiden teşekkürler, lütfen bana örnek kod sağlayın.


Yanıtlar:


262

Bir kullan NSDateFormatter dönüştürmek için string1bir içine NSDate, ardından gerekli olsun NSDateComponents :

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

Dateformat hakkında daha fazla bilgi resmi unicode sitesinde mevcuttur


Merhaba Bir şüphe daha, NSDate'de saati, dakikayı değiştirmek mümkün mü
mac

Saat ve dakikayı değiştirmek için NSDate'in + dateWithTimeIntervalSinceReferenceDate: bölümüne bakabilirsiniz. Bu yöntem, bugüne kadar belirli bir saniye miktarı eklemenizi (ve yeni bir tarih döndürmenizi) sağlar.
Thomas Müller

İOS'ta "bileşenler" yalnızca 8.0 sürümünden itibaren mevcuttur. Peki ya <8.0?
Rhuantavan

2
@Rhuantavan developer.apple.com/library/ios/documentation/Cocoa/Reference/… : "iOS 2.0 ve sonrasında mevcuttur." Bu API'yi kesinlikle yıllardır kullanıyorum.
Thomas Müller

Sanırım bunu 8.0 olarak bildirdiği için XCode'da bir hata. Kaynakları veya çevrimiçi belgeleri kontrol etmeliydim. Benim hatam.
Rhuantavan

52

Yalnızca bir dizge olarak sunmak için ihtiyacınız varsa, aşağıdaki kod çok daha kolaydır

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

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

45

Bence sorunun peşinde olduğu şey bu, biçimlendiricilere gerek yok:

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
AM veya PM nasıl alınır?
Yalamandarao


4

C kütüphanesini kullanacak olsaydınız, bu yapılabilir:

time_t t;
struct tm * timeinfo;

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

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

Ve Swift kullanarak:

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

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

Daha fazla yardım için bkz: http://www.cplusplus.com/reference/ctime/localtime/


4

İOS 8 ile Apple almak için bir yardımcı yöntemi tanıtıldı hour, minute, secondve nanosecondbir NSDate nesneden.

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

hızlı

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

Bir tarihten saat ve dakika almak için aşağıdaki şeyi yapabilirsiniz:

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

Kısa ayrıntılar için NSDateFormatter kullanın .
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))

Lütfen print deyiminde String'e çevirmeyi not edin, bu değeri değişkenlere kolayca atayabilirsiniz, örneğin:

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

Ardından değerleri şu şekilde birleştirebilirsiniz:

var compoundString = "\(hour):\(minute)"
print(compoundString)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.