Câu trả lời:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
đầu ra ngày hiện tại trong tuần dưới dạng một chuỗi trong ngôn ngữ phụ thuộc vào cài đặt khu vực hiện tại.
Để chỉ nhận được một số ngày trong tuần, bạn phải sử dụng lớp NSCalendar:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
Chỉ cần sử dụng ba dòng sau:
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
Nhiều câu trả lời ở đây không được dùng nữa. Tính năng này hoạt động kể từ iOS 8.4 và cung cấp cho bạn ngày trong tuần dưới dạng chuỗi và dưới dạng số.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"The day of the week: %@", [dateFormatter stringFromDate:[NSDate date]]);
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [gregorian components:NSCalendarUnitWeekday fromDate:[NSDate date]];
int weekday = [comps weekday];
NSLog(@"The week day number: %d", weekday);
weekday
thành phần của NSCalendar
là an NSInteger
, bạn sẽ cần phải truyền [comps weekday]
đến một int
, nếu bạn cần, nếu không nó sẽ hiển thị cảnh báo về điều này.
Đây là cách bạn làm điều đó trong Swift 3 và nhận một tên ngày được bản địa hóa…
let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]
-(void)getdate {
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];
NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
[dateFormatter setDateFormat:@"EEEE"];
NSDate *now = [[NSDate alloc] init];
NSString *dateString = [format stringFromDate:now];
NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];
NSString *week = [dateFormatter stringFromDate:now];
NSLog(@"\n"
"theDate: |%@| \n"
"theTime: |%@| \n"
"Now: |%@| \n"
"Week: |%@| \n"
, theDate, theTime,dateString,week);
}
Tôi cần chỉ mục ngày trong tuần (Gregorian) đơn giản, trong đó 0 = Chủ nhật và 6 = Thứ Bảy được sử dụng trong các thuật toán đối sánh mẫu. Từ đó, việc tra cứu tên ngày từ một mảng bằng cách sử dụng chỉ mục là một vấn đề đơn giản. Đây là những gì tôi nghĩ ra không yêu cầu định dạng ngày tháng, NSCalendar hoặc thao tác thành phần ngày tháng:
+(long)dayOfWeek:(NSDate *)anyDate {
//calculate number of days since reference date jan 1, 01
NSTimeInterval utcoffset = [[NSTimeZone localTimeZone] secondsFromGMT];
NSTimeInterval interval = ([anyDate timeIntervalSinceReferenceDate]+utcoffset)/(60.0*60.0*24.0);
//mod 7 the number of days to identify day index
long dayix=((long)interval+8) % 7;
return dayix;
}
Đây là mã cập nhật cho Swift 3
Mã:
let calendar = Calendar(identifier: .gregorian)
let weekdayAsInteger = calendar.component(.weekday, from: Date())
Để in tên sự kiện dưới dạng Chuỗi:
let dateFromat = DateFormatter()
datFormat.dateFormat = "EEEE"
let name = datFormat.string(from: Date())
Tôi nghĩ rằng chủ đề này thực sự hữu ích, vì vậy tôi đăng một số mã tương thích Swift 2.1 .
extension NSDate {
static func getBeautyToday() -> String {
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE',' dd MMMM"
return dateFormatter.stringFromDate(now)
}
}
Mọi nơi bạn có thể gọi:
let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"
Swift 3.0
Như @ delta2flat đã đề xuất, tôi cập nhật câu trả lời cung cấp cho người dùng khả năng chỉ định định dạng tùy chỉnh.
extension NSDate {
static func getBeautyToday(format: String = "EEEE',' dd MMMM") -> String {
let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.string(from: now)
}
}
Câu trả lời của Vladimir phù hợp với tôi, nhưng tôi nghĩ rằng tôi sẽ đăng liên kết Unicode cho các chuỗi định dạng ngày tháng.
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
Liên kết này dành cho iOS 6. Các phiên bản khác của iOS có các tiêu chuẩn khác nhau có thể tìm thấy trong tài liệu X-Code.
Theo cách này, nó hoạt động trong Swift:
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
Sau đó, gán các ngày trong tuần cho các số kết quả.
Tôi đã có một vấn đề khá lạ khi nhận được một ngày trong tuần. Chỉ thiết lập FirstWeekday là không đủ. Việc đặt múi giờ cũng rất cần thiết. Giải pháp làm việc của tôi là:
NSCalendar* cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[cal setFirstWeekday:1]; //Sunday
NSDateComponents* comp = [cal components:( NSWeekOfMonthCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit) fromDate:date];
return [comp weekday] ;
Swift 2: Nhận các ngày trong tuần trong một dòng. ( dựa trên câu trả lời neoscribe )
let dayOfWeek = Int((myDate.timeIntervalSinceReferenceDate / (60.0*60.0*24.0)) % 7)
let isMonday = (dayOfWeek == 0)
let isSunday = (dayOfWeek == 6)
self.dateTimeFormatter = [[NSDateFormatter alloc] init];
self.dateTimeFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; // your timezone
self.dateTimeFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"zh_CN"]; // your locale
self.dateTimeFormatter.dateFormat = @"ccc MM-dd mm:ss";
có ba biểu tượng chúng ta có thể sử dụng để định dạng ngày trong tuần:
Hai tài liệu sau đây có thể giúp bạn.
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
Bản giới thiệu:
bạn có thể kiểm tra mẫu của mình trên trang web này:
[dateFormatter weekdaySymbols]
(và tương tự), mà trả về một NSArray của NSStrings bắt đầu với chủ nhật tại chỉ số 0.