2015-05-16 4 views
1

Каков правильный календарный способ (в iOS или OS X) для получения стандартных рабочих дней недели (например, по будням) по сравнению с нерабочими днями недели? Это учитывает, что some parts of the world doesn't follow the Monday through Friday working day рутины. Например. ОАЭ и некоторые части Малайзии работают с воскресенья по четверг.Как получить выходные и выходные дни в какао?

Я ищу эмулировать встроенное приложение сигнализации iOS, в котором, если я выберу повторяющийся день с понедельника по пятницу, он скажет, что мой будильник повторяет «будни», тогда как для сигналов тревоги, которые срабатывают в субботу и воскресенье, «Выходные дни». Тем не менее, я хотел бы, чтобы мое приложение также правильно работало в других частях света, которое не следует за рабочей неделей западного мира.

Я работал с NSCalendarisDateInWeekend функцией с различными другими календарями и не смог найти подходящий метод для определения буднего дня и выходных. Вот отрывок из Swift детскую площадку, которую я получил до сих пор:

import UIKit 

let arabicLocale = NSLocale(localeIdentifier: "en_AR") 
let islamicTabularCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierIslamicTabular) 
islamicTabularCalendar?.locale = arabicLocale 
let islamicTabularFormatter = NSDateFormatter() 
islamicTabularFormatter.calendar = islamicTabularCalendar 
islamicTabularFormatter.dateStyle = NSDateFormatterStyle.FullStyle 

let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
gregorianCalendar?.locale = arabicLocale 
let gregorianFormatter = NSDateFormatter() 
gregorianFormatter.calendar = gregorianCalendar 
gregorianFormatter.dateStyle = NSDateFormatterStyle.FullStyle 

let monday = NSDateComponents() 
monday.weekday = 2 
monday.weekOfMonth = 0 
let friday = NSDateComponents() 
friday.weekday = 6 
friday.weekOfMonth = 0 

let mondayDate = islamicTabularCalendar?.dateFromComponents(monday) 
gregorianFormatter.stringFromDate(mondayDate!)   // "Monday, July 8, 622" 
islamicTabularFormatter.stringFromDate(mondayDate!)  // "Monday, Dhuʻl-Hijjah 20, 0 AH" 
islamicTabularCalendar?.isDateInWeekend(mondayDate!) // false 

let fridayDate = islamicTabularCalendar?.dateFromComponents(friday) 
gregorianFormatter.stringFromDate(fridayDate!)   // Friday, July 12, 622 
islamicTabularFormatter.stringFromDate(fridayDate!)  // Friday, Dhuʻl-Hijjah 24, 0 AH 
islamicTabularCalendar?.isDateInWeekend(fridayDate!) // false 

Что я ищу является то, что возвращает false по пятницам в некоторых частях мира, что практика понедельника по пятницу рабочих дней, но возвращает true ОАЭ и тому подобное.

+0

возможно дубликат [Как я могу узнать, является ли NSDate это рабочий день?] (Http://stackoverflow.com/questions/17546017/как-может-я-найти выход-ли-ан-NSDate-это-бизнес-день) – matt

ответ

0

Я, наконец, получил его. Ошибка была в идентификатора языка, который должен быть en_AE вместо en_AR

import UIKit 

let arabicLocale = NSLocale(localeIdentifier: "en_AE") 
let islamicTabularCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierIslamicTabular) 
islamicTabularCalendar?.locale = arabicLocale 
let islamicTabularFormatter = NSDateFormatter() 
islamicTabularFormatter.calendar = islamicTabularCalendar 
islamicTabularFormatter.dateStyle = NSDateFormatterStyle.FullStyle 

let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
gregorianCalendar?.locale = arabicLocale 
let gregorianFormatter = NSDateFormatter() 
gregorianFormatter.calendar = gregorianCalendar 
gregorianFormatter.dateStyle = NSDateFormatterStyle.FullStyle 

let monday = NSDateComponents() 
monday.weekday = 2 
monday.weekOfMonth = 0 
let friday = NSDateComponents() 
friday.weekday = 6 
friday.weekOfMonth = 0 

let mondayDate = islamicTabularCalendar?.dateFromComponents(monday) 
gregorianFormatter.stringFromDate(mondayDate!)   // "Monday, July 8, 622" 
islamicTabularFormatter.stringFromDate(mondayDate!)  // "Monday, Dhuʻl-Hijjah 20, 0 AH" 
islamicTabularCalendar?.isDateInWeekend(mondayDate!) // false 
gregorianCalendar?.isDateInWeekend(mondayDate!)   // false 

let fridayDate = islamicTabularCalendar?.dateFromComponents(friday) 
gregorianFormatter.stringFromDate(fridayDate!)   // Friday, July 12, 622 
islamicTabularFormatter.stringFromDate(fridayDate!)  // Friday, Dhuʻl-Hijjah 24, 0 AH 
islamicTabularCalendar?.isDateInWeekend(fridayDate!) // true 
gregorianCalendar?.isDateInWeekend(fridayDate!)   // false 
Смежные вопросы