У меня есть число от 1 до 7, которое я хочу включить в пользовательский языковой эквивалент с понедельника по воскресенье. Могу ли я это сделать, и если да, то как?
Как получить имя дня недели в пользовательской локали?
Ответ 1
NSDateFormatter
может предоставить вам список имен:
NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setLocale: [NSLocale currentLocale]];
NSArray * weekdays = [df weekdaySymbols];
Что вы можете затем индексировать, как любой другой массив [weekdays objectAtIndex:dayIdx];
Помните, однако, что первый будний день может отличаться по языку; как это может измениться (как и многое другое о NSCalendar
), не особенно хорошо объяснено в документах.
Ответ 2
Конечно. Ниже приведен метод/функция, которая возвращает имя дня недели для дня недели в диапазоне от 0 до 6.
Версия Objective C:
- (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];
}
и версия Swift 2:
func weekdayNameFromWeekdayNumber(weekdayNumber: Int) -> String {
let calendar = NSCalendar.currentCalendar()
let weekdaySymbols = calendar.weekdaySymbols
let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
return weekdaySymbols[index]
}
и версия Swift 3.0:
func weekdayNameFrom(weekdayNumber: Int) -> String {
let calendar = Calendar.current
let weekdaySymbols = calendar.weekdaySymbols
let index = (weekdayNumber + calendar.firstWeekday - 1) % 7
return weekdaySymbols[index]
}
Ответ 3
NSArray *weekdaySymbols = [[NSDateFormatter alloc] weekdaySymbols];
Вы можете использовать один из {weekdaySymbols, shortWeekdaySymbols, veryShortWeekdaySymbols}
Ответ 4
На основе отличного решения gavdotnet европейская версия (которая начинается с понедельника):
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
}
Ответ 5
Вот мой прием:
Swift 3, iOS8 +
func weekdayNameFrom(weekdayNumber: Int) -> String {
let calendar = Calendar.current
let dayIndex = ((weekdayNumber - 1) + (calendar.firstWeekday - 1)) % 7
return calendar.weekdaySymbols[dayIndex]
}
Обратите внимание, что у вас есть 3 списка:
-
weekdaySymbols
→["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
-
shortWeekdaySymbols
→["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
-
veryShortWeekdaySymbols
→["S", "M", "T", "W", "T", "F", "S"]
Ответ 6
Я нашел это решение: У вас есть объект даты, вы хотите получить день недели из этого объекта.
-
Установите языковой стандарт в формат даты, как показано ниже
let eventDate = dateFormatter.date(from: self) let language = Locale.preferredLanguages.first print("The locale id is \(language)") // This date format can be what ever you like, in this case i used EE dd dateFormatter.dateFormat = "EE dd" if let idiomaLocale = language { dateFormatter.locale = Locale(identifier: idiomaLocale) } else { dateFormatter.locale = Locale(identifier: "es_CO") }
-
Выполняя это, вы можете быть уверены, что получаете правильный идентификатор для вашего форматирования даты, после чего с настройкой форматирования даты вы можете продолжить и получить строку дня недели.
//convert your date to string let stringDate = dateFormatter.string(from: eventDate!) return stringDate
Надеюсь, это поможет кому-то:). с новым годом.