我如何获得与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
以下两个文件可能会帮助你。
http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
演示:
你可以在这个网站上testing你的模式: