I have a number between 1 and 7, which I want to turn into the user's locale's equivalent of Monday to Sunday. Can I do that and if so, how?
An NSDateFormatter
can give you the list of names:
NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setLocale: [NSLocale currentLocale]];
NSArray * weekdays = [df weekdaySymbols];
Which you can then index like any other array [weekdays objectAtIndex:dayIdx];
Be aware, however, that the first weekday may differ by locale; exactly how it may vary (along with many other things about NSCalendar
) is not particularly well-explained in the docs.
Here's my take:
Swift 3, iOS8+
func weekdayNameFrom(weekdayNumber: Int) -> String {
let calendar = Calendar.current
let dayIndex = ((weekdayNumber - 1) + (calendar.firstWeekday - 1)) % 7
return calendar.weekdaySymbols[dayIndex]
}
Note that you have 3 lists available:
weekdaySymbols
-> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
shortWeekdaySymbols
-> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
veryShortWeekdaySymbols
-> ["S", "M", "T", "W", "T", "F", "S"]
Sure can. Below is a method / function that returns the weekday name for the weekday number in the range 0 to 6.
The Objective C version:
- (NSString *)weekdayNameFromWeekdayNumber:(NSInteger)weekdayNumber
{
NSCalendar *calendar = [NSCalendar currentCalendar];
// Fetch the days of the week in words for the current language (Sunday to Saturday)
NSArray *weekdaySymbols = calendar.weekdaySymbols;
// Because the first week day changes depending on the region settings.
// ie. In Bangladesh the first day of the week is Friday. In UK it is Monday
NSInteger index = (weekdayNumber + calendar.firstWeekday - 1) % 7;
return weekdaySymbols[index];
}
and the Swift 2 version:
func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
let calendar = NSCalendar.currentCalendar()
let weekdaySymbols = calendar.weekdaySymbols
let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
return weekdaySymbols[index]
}
and Swift 3.0 version:
func weekdayNameFrom(weekdayNumber: Int) -> String {
let calendar = Calendar.current
let weekdaySymbols = calendar.weekdaySymbols
let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
return weekdaySymbols[index]
}
NSArray *weekdaySymbols = [[NSDateFormatter alloc] weekdaySymbols];
You can use one of {weekdaySymbols, shortWeekdaySymbols, veryShortWeekdaySymbols}
Based on gavdotnet excellent solution, the European version (that starts from Monday) is:
func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
var EuroDay = weekdayNumber + 1
if EuroDay == 7 {
EuroDay = 0
}
let calendar = NSCalendar.currentCalendar()
let weekdaySymbols = calendar.weekdaySymbols
let index = EuroDay + calendar.firstWeekday - 1
return weekdaySymbols[index].uppercaseString
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With