답변:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);
현재 지역 설정에 따라 현재 요일을 로케일의 문자열로 출력합니다.
주일 번호를 얻으려면 NSCalendar 클래스를 사용해야합니다.
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];
다음 세 줄을 사용하십시오.
CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);
여기에있는 많은 답변은 더 이상 사용되지 않습니다. 이것은 iOS 8.4에서 작동하며 요일을 문자열과 숫자로 제공합니다.
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
의 구성 요소가 NSCalendar
입니다 NSInteger
, 당신은 캐스트가 필요합니다 [comps weekday]
에 int
당신이 필요로하는 경우, 그렇지 않으면이에 대한 경고를 표시합니다.
-(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);
}
패턴 일치 알고리즘에서 사용할 간단한 (그레고리 안) 요일 인덱스가 필요했습니다. 여기서 0은 일요일이고 6은 토요일입니다. 거기에서 인덱스를 사용하여 배열에서 요일 이름을 찾는 것은 간단한 문제입니다. 다음은 날짜 포맷터, NSCalendar 또는 날짜 구성 요소 조작이 필요하지 않은 내용입니다.
+(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;
}
이 주제가 정말 유용하다고 생각하므로 Swift 2.1 호환 코드를 게시 합니다.
extension NSDate {
static func getBeautyToday() -> String {
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE',' dd MMMM"
return dateFormatter.stringFromDate(now)
}
}
전화 할 수있는 곳 :
let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"
스위프트 3.0
@ delta2flat이 제안했듯이 사용자에게 사용자 지정 형식을 지정할 수있는 기능을 제공하는 답변을 업데이트합니다.
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)
}
}
Vladimir의 대답은 저에게 잘 맞았지만 날짜 형식 문자열에 대한 유니 코드 링크를 게시 할 것이라고 생각했습니다.
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
이 링크는 iOS 6 용입니다. 다른 버전의 iOS에는 X-Code 문서에서 찾을 수있는 다른 표준이 있습니다.
이렇게하면 Swift에서 작동합니다.
let calendar = NSCalendar.currentCalendar()
let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())
그런 다음 결과 숫자에 평일을 할당하십시오.
나는 요일을 얻는 데 아주 이상한 문제가 있었다. firstWeekday 만 설정하는 것만으로는 충분하지 않았습니다. 시간대를 설정하는 것도 필요했습니다. 내 작업 솔루션은 다음과 같습니다.
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 : 요일을 한 줄로 가져옵니다. ( 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";
요일 형식을 지정하는 데 사용할 수있는 세 가지 기호가 있습니다.
다음 두 문서가 도움이 될 수 있습니다.
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
데모:
이 웹 사이트에서 패턴을 테스트 할 수 있습니다.
[dateFormatter weekdaySymbols]
인덱스 0에서 일요일로 시작하는 NSStrings의 NSArray를 반환하는 (및 유사)를 사용할 수 있습니다.