我如何获得与Cocoa Touch一周的一天?

如何在Objective-C中将string作为一个string?

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"EEEE"]; NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]); 

根据当前区域设置,将当前星期几输出为区域设置中的string。

为了得到一个星期的数字,你必须使用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,并以string和数字forms给出星期几。

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

这是你如何在Swift 3中完成的,并获得一个本地化的date名称…

 let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7 let dayName = DateFormatter().weekdaySymbols[dayNumber - 1] 

我需要一个简单的(格里高利)星期几索引,其中0 =星期日,6 =星期六用于模式匹配algorithm。 从那里使用索引查找数组中的date名称是一件简单的事情。 这是我想到的,不需要date格式化程序或NSCalendar或date组件操作:

 +(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" 

Swift 3.0

正如@ delta2flatbuild议的那样,我更新了答案,让用户能够指定自定义格式。

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

弗拉基米尔的答案对我来说效果不错,但我认为我会发布date格式string的Unicode链接。

http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

此链接适用于iOS 6.其他版本的iOS有不同的标准,可以在X-Code文档中find。

这样它在Swift中工作:

  let calendar = NSCalendar.currentCalendar() let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate()) 

然后分配星期几到结果数字。

这里是Swift 3的更新代码

代码:

 let calendar = Calendar(identifier: .gregorian) let weekdayAsInteger = calendar.component(.weekday, from: Date()) 

以stringforms打印事件的名称:

  let dateFromat = DateFormatter() datFormat.dateFormat = "EEEE" let name = datFormat.string(from: Date()) 

我有一个很奇怪的问题,得到一个星期的一天。 只设置第一个周日是不够的。 设置时区也是必要的。 我的工作解决scheme是:

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

有三个符号可以用来格式化星期几:

  • Ë
  • Ë
  • C

以下两个文件可能会帮助你。

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

演示:

你可以在这个网站上testing你的模式:

http://nsdateformatter.com/