更改周的第一天爲了讓我用一週的天數:在NSDateFormatter
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSArray *weekdays = [dateFormatter shortWeekdaySymbols];
平日裏給了我與天名稱的數組,但它開始在週日。出於某些原因,我希望此陣列在週一或週日開始,具體取決於設備的本地化設置。
有沒有辦法做到這一點?
更改周的第一天爲了讓我用一週的天數:在NSDateFormatter
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSArray *weekdays = [dateFormatter shortWeekdaySymbols];
平日裏給了我與天名稱的數組,但它開始在週日。出於某些原因,我希望此陣列在週一或週日開始,具體取決於設備的本地化設置。
有沒有辦法做到這一點?
您可以從當前語言環境的NSCalendar
對象的-firstWeekday
方法中獲取當前語言環境的第一個工作日的從1開始的索引。然後你就可以相應地修改你的那一週的名字數組:
// get week day names array
NSArray *weekdays = self.shortWeekdaySymbols;
// adjust array depending on which weekday should be first
NSUInteger firstWeekdayIndex = [NSCalendar currentCalendar].firstWeekday - 1;
if (firstWeekdayIndex) {
NSRange firstRange = NSMakeRange(firstWeekdayIndex, weekdays.count - firstWeekdayIndex);
NSRange lastRange = NSMakeRange(0, firstWeekdayIndex);
NSArray *firstArray = [weekdays subarrayWithRange:firstRange];
NSArray *lastArray = [weekdays subarrayWithRange:lastRange];
weekdays = [firstArray arrayByAddingObjectsFromArray:lastArray];
}
NSLog(@"%@", weekdays);
我沒有iPhone的SDK,但據我所知,這些API應該是所有可用的存在和行爲的方式在OS X系統
取得了相同的導致類似用斯威夫特hasseg:
var symbols = dateFormatter.shortWeekdaySymbols as! [String]
let firstDayIndex = calendar.firstWeekday - 1
if firstDayIndex > 0 {
var sub = symbols[0..<firstDayIndex]
symbols.removeRange(Range<Int>(start:0, end:firstDayIndex))
symbols += sub
}
for i in 0...6 {
let day = Calendar.current.weekdaySymbols[(i + Calendar.current.firstWeekday - 1) % 7]
print(day)
}
像myexec解決方案,但更通用的,同樣簡潔
let numDays = Calendar.current.weekdaySymbols.count
let first = Calendar.current.firstWeekday - 1
let end = first + numDays - 1
let days = (first...end).map {Calendar.current.weekdaySymbols[$0 % numDays]}
您需要使用NSCalender以編程方式更改本週的開始日期。
NSCalendar *_calendar;
_calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
_calendar.timeZone = [NSTimeZone localTimeZone];
[_calendar setFirstWeekday:2];// Sunday == 1, Saturday == 7
_calendar.locale = [NSLocale currentLocale];
NSDateComponents *dateComponent = [_calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]];
NSDate *now = [NSDate date];
NSDateComponents *comp = [_calendar components:NSCalendarUnitYear fromDate:now];
[comp setWeekOfMonth:dateComponent.weekOfYear]; //Week number.
[comp setWeekday:2];
NSDate * weekstartPrev = [_calendar dateFromComponents:comp];