Có vẻ như là một việc đơn giản nhưng tôi dường như không thể tìm ra cách để thực hiện nó.
Sẽ thật tuyệt khi thấy một vài phương pháp khác nhau.
Có vẻ như là một việc đơn giản nhưng tôi dường như không thể tìm ra cách để thực hiện nó.
Sẽ thật tuyệt khi thấy một vài phương pháp khác nhau.
Câu trả lời:
Câu trả lời của @ Chuck là đúng, và hãy dẫn tôi đến đoạn mã sau. Tôi nghĩ tôi sẽ chia sẻ:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Bạn có thể sử dụng cái này
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
Hy vọng rằng cái này sẽ giúp đc bạn.
Ví dụ thường là cách dễ nhất để học. Dưới đây là một vài ví dụ.
Đây là cái dễ nhất.
let currentDateTime = Date()
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20
// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1
// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)
Có nhiều cách khác để tạo ngày tháng. Nếu bạn muốn tìm hiểu những điều đó, cũng như cách hiển thị ngày tháng, hãy xem câu trả lời đầy đủ hơn của tôi .
Xem tài liệu về NSDate . Bạn có thể sử dụng dateFromString:
phương pháp của NSDateFormatter
hoặc dateFromComponents:
phương pháp của NSCalendar
.
init
?
Tôi đã tìm thấy chủ đề này khi đang tìm câu trả lời cho câu hỏi này nhưng sau đó tôi tìm thấy một ví dụ điển hình trong cuốn sách Lập trình mục tiêu-C Big Nerd Ranch của tôi. Tín dụng cho họ, không phải tôi.
NSDateComponents *myBDay =[[NSDateComponents alloc] init];
[myBDay setDay:22];
[myBDay setMonth: 04];
[myBDay setYear: 1984];
[myBDay setHour:9];
[myBDay setMinute:25];
[myBDay setSecond:35];
NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *dateOfBirth = [g dateFromComponents:myBDay];
Thật là nực cười phải không?
Giữa năm 2013 và Apple vẫn chưa cung cấp một cách đơn giản để đặt giá trị NSDate.
Trong dự án iPad hiện tại của mình, tôi không thể tin được rằng mình đã phải ngừng năng suất một lúc để viết lớp trợ giúp của riêng mình để nhận được giá trị Năm từ NSDate. Ý tôi là, thôi nào, đây là những thứ cơ bản.
Dù sao, đây là lớp trợ giúp mà tôi đã sử dụng trong dự án của mình, để chuyển đổi một chuỗi thành giá trị NSDate:
@implementation DateHelper
+(NSDate*)parseDateString:(NSString *)dateString
{
NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
[rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];
NSDate *theDate = nil;
NSError *error = nil;
if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
}
return theDate;
}
@end
Sử dụng mã này, bạn có thể đặt giá trị NSDate bằng cách sử dụng một cái gì đó như:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Lưu ý: chức năng này dựa trên mã lấy từ đây: https://stackoverflow.com/a/3968411/391605
Giải pháp của tôi là sử dụng đoạn mã sau, nhưng tôi thấy rằng đôi khi , nó không phân tích cú pháp và sẽ trả về nil .
// Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
// THIS DOESN'T WORK ! DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate* date = [formatter dateFromString:dateString];
Tôi nhớ nó đã thất bại thảm hại vào "ngày 12 tháng 10 năm 2012" ... đó là lý do tại sao tôi đã từ bỏ và sử dụng hàm "parseDateString" phức tạp hơn được hiển thị ở trên.
Quan điểm của tôi là ... hãy cẩn thận.
Một số chức năng NSDate rất cơ bản không hoạt động bình thường ...
setHour
,setMinute
,setSecond
, vv cho mịn granularity.