如何从 Swift 中的系统获取工作日数组?
How to get weekdays array from system in Swift?
如何从系统(我认为来自 NSDate
)获取包含星期几的数组?
到目前为止,我只能获取当天,但我希望能够获取数组中的所有工作日。
如果一周的第一天设置为星期一,我的数组将如下所示:
[ Mon, Tue, Wed... ]
如果一周的第一天是星期天,我的数组将如下所示:
[Sun, Mon, Tue... ]
代码:
let dateNow = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitYear , fromDate: dateNow)
/*This is the way how i take system time */
let format = NSDateFormatter()
format.dateFormat = "EEE"
stringDay = format.stringFromDate(dateNow)
尝试 these properties:
let fmt = NSDateFormatter()
fmt.weekdaySymbols // -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
fmt.shortWeekdaySymbols // -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
fmt.veryShortWeekdaySymbols // -> ["S", "M", "T", "W", "T", "F", "S"]
fmt.standaloneWeekdaySymbols // -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
fmt.shortStandaloneWeekdaySymbols // -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
fmt.veryShortStandaloneWeekdaySymbols // -> ["S", "M", "T", "W", "T", "F", "S"]
似乎他们总是 return Sun ... Sat
数组,而不管 .calendar
的 .firstWeekday
属性。因此,您必须手动旋转它。
let firstWeekday = 2 // -> Monday
var symbols = fmt.shortWeekdaySymbols
symbols = Array(symbols[firstWeekday-1..<symbols.count]) + symbols[0..<firstWeekday-1]
// -> ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
如果您想将星期一作为第一天,可以使用此扩展程序。
extension SequenceType where Generator.Element == String {
func mondayFirst(withSunday: (Bool)) -> [String] {
var tempWeek = self as! [String]
let tempDay = tempWeek.first
tempWeek.removeFirst()
if (!withSunday) {
tempWeek.append(tempDay!)
}
return tempWeek
}
}
Swift
创建 DateFrmatter
:
let formatter: DateFormatter = {
let formatter = DateFormatter()
// You can setup the formatter here. For example, setting the locale to return the weekdays in the desired language.
formatter.locale = .init(identifier: "fa")
return formatter
}()
✅ Note Creating a formatter is a very expensive task and you may experience lags in the main thread. Try caching it if you feel you will need it again
现在您可以使用:
formatter.weekdaySymbols \ ["یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"]
formatter.veryShortWeekdaySymbols \ ["ی", "د", "س", "چ", "پ", "ج", "ش"]
请注意 您可以使用 en
标识符来获取以上所有英文内容,例如:
,,,
formatter.locale = .init(identifier: "en")
,,,
formatter.weekdaySymbols // -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
formatter.shortWeekdaySymbols // -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
formatter.veryShortWeekdaySymbols // -> ["S", "M", "T", "W", "T", "F", "S"]
如何从系统(我认为来自 NSDate
)获取包含星期几的数组?
到目前为止,我只能获取当天,但我希望能够获取数组中的所有工作日。
如果一周的第一天设置为星期一,我的数组将如下所示:
[ Mon, Tue, Wed... ]
如果一周的第一天是星期天,我的数组将如下所示:
[Sun, Mon, Tue... ]
代码:
let dateNow = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitYear , fromDate: dateNow)
/*This is the way how i take system time */
let format = NSDateFormatter()
format.dateFormat = "EEE"
stringDay = format.stringFromDate(dateNow)
尝试 these properties:
let fmt = NSDateFormatter()
fmt.weekdaySymbols // -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
fmt.shortWeekdaySymbols // -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
fmt.veryShortWeekdaySymbols // -> ["S", "M", "T", "W", "T", "F", "S"]
fmt.standaloneWeekdaySymbols // -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
fmt.shortStandaloneWeekdaySymbols // -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
fmt.veryShortStandaloneWeekdaySymbols // -> ["S", "M", "T", "W", "T", "F", "S"]
似乎他们总是 return Sun ... Sat
数组,而不管 .calendar
的 .firstWeekday
属性。因此,您必须手动旋转它。
let firstWeekday = 2 // -> Monday
var symbols = fmt.shortWeekdaySymbols
symbols = Array(symbols[firstWeekday-1..<symbols.count]) + symbols[0..<firstWeekday-1]
// -> ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
如果您想将星期一作为第一天,可以使用此扩展程序。
extension SequenceType where Generator.Element == String {
func mondayFirst(withSunday: (Bool)) -> [String] {
var tempWeek = self as! [String]
let tempDay = tempWeek.first
tempWeek.removeFirst()
if (!withSunday) {
tempWeek.append(tempDay!)
}
return tempWeek
}
}
Swift
创建 DateFrmatter
:
let formatter: DateFormatter = {
let formatter = DateFormatter()
// You can setup the formatter here. For example, setting the locale to return the weekdays in the desired language.
formatter.locale = .init(identifier: "fa")
return formatter
}()
✅ Note Creating a formatter is a very expensive task and you may experience lags in the main thread. Try caching it if you feel you will need it again
现在您可以使用:
formatter.weekdaySymbols \ ["یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"]
formatter.veryShortWeekdaySymbols \ ["ی", "د", "س", "چ", "پ", "ج", "ش"]
请注意 您可以使用 en
标识符来获取以上所有英文内容,例如:
,,,
formatter.locale = .init(identifier: "en")
,,,
formatter.weekdaySymbols // -> ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
formatter.shortWeekdaySymbols // -> ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
formatter.veryShortWeekdaySymbols // -> ["S", "M", "T", "W", "T", "F", "S"]