【问题标题】:How to get weekends vs weekdays in Cocoa?如何在 Cocoa 中获得周末与工作日?
【发布时间】:2015-05-16 15:31:34
【问题描述】:

获取一周标准工作日(例如工作日)与非工作日的正确日历无关方式(在 iOS 或 OS X 中)是什么?这是考虑到some parts of the world doesn't follow the Monday through Friday working day 例程。例如。阿联酋和马来西亚部分地区从周日到周四工作。

我希望模拟 iOS 的内置闹钟应用程序,如果我选择周一到周五的重复日期,它会说我的闹钟重复“工作日”,而在周六和周日触发的闹钟会说“周末”。但是,我希望我的应用也能在世界其他不遵循西方世界工作周的地方正常运行。

我一直在玩弄 NSCalendarisDateInWeekend 函数和其他各种日历,但找不到确定工作日与周末的好方法。这是我到目前为止从 Swift 操场上得到的一个 sn-p:

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 的东西。

【问题讨论】:

标签: cocoa locale nsdateformatter nscalendar


【解决方案1】:

我终于明白了。错误在于语言环境标识符应该是 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

【讨论】:

    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2017-08-14
    相关资源
    最近更新 更多