Làm cách nào để lấy giờ và phút từ NSDate?


113

Trong ứng dụng của mình, tôi cần lấy giờ và phút riêng biệt:

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

Xem xét string1chứa 11:59:13 AMcái nào đến từ datepicker.

Ở đây, nếu tôi sử dụng mã trên, có thể lấy giờ nếu nó lớn hơn 9. Nếu không, tôi cần thay đổi NSMakeRange(0,1)để nhận giờ từ 1 đến 9.

Có phương pháp nào để lấy giờ, phút, v.v. không?

Cảm ơn trước, vui lòng cung cấp cho tôi mã mẫu.


Câu trả lời:


262

Sử dụng NSDateFormatter để chuyển đổi string1thành một NSDate, sau đó nhận NSDateComponents cần thiết :

Mục tiêu-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 và 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

Thông tin thêm về các DateFormat là trên trang web chính thức unicode


Xin chào Một câu hỏi nữa, liệu có thể thay đổi giờ, phút trong NSDate không
mac

Để thay đổi giờ và phút, có thể nhìn vào NSDate's + dateWithTimeIntervalSinceReferenceDate :. Phương pháp đó cho phép bạn thêm một lượng giây cụ thể vào ngày (và trả về một ngày mới).
Thomas Müller

Trên iOS, "thành phần" chỉ có sẵn kể từ phiên bản 8.0. <8.0 thì sao?
Rhuantavan

2
@Rhuantavan developer.apple.com/library/ios/documentation/Cocoa/Reference/… : "Có sẵn trong iOS 2.0 trở lên." Tôi chắc chắn đã sử dụng API này trong nhiều năm.
Thomas Müller

Tôi đoán đó là một lỗi trong XCode vì nó đã báo cáo đây là 8.0. Tôi nên kiểm tra các nguồn hoặc tài liệu trực tuyến. Lỗi của tôi.
Rhuantavan

52

Nếu bạn chỉ cần nó để trình bày dưới dạng một chuỗi, mã sau sẽ dễ dàng hơn nhiều

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

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

45

Đối với tôi, đây có vẻ là câu hỏi đặt ra sau, không cần các trình định dạng:

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
Làm cách nào để nhận AM hoặc PM?
Yalamandarao


4

Nếu bạn đang sử dụng thư viện C thì điều này có thể được thực hiện:

time_t t;
struct tm * timeinfo;

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

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

Và sử dụng Swift:

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

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

Để được hướng dẫn thêm, hãy xem: http://www.cplusplus.com/reference/ctime/localtime/


4

Với iOS 8, Apple đã giới thiệu một phương pháp helper để lấy hour, minute, secondnanosecondtừ một đối tượng 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);

Nhanh

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

Bạn có thể làm điều sau để nhận giờ và phút từ một ngày:

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

Sử dụng NSDateFormatter để biết chi tiết ngắn gọ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))

Vui lòng lưu ý việc ép kiểu thành Chuỗi trong câu lệnh in, bạn có thể dễ dàng gán giá trị đó cho các biến, như sau:

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

Sau đó, bạn có thể nối các giá trị như sau:

var compoundString = "\(hour):\(minute)"
print(compoundString)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.