使用 NSDate 获取星期几 [英] Get day of week using NSDate
问题描述
我创建了一个方法,该方法应该以YYYY-MM-DD"形式接收一个字符串,并吐出一个 int 来表示与其所在周相关的日期位置(无论它是否在月份之间重叠).所以例如 sunday=1 monday=2 等等.
I created a method that is supposed to take in a string in "YYYY-MM-DD" form and spit out an int that represents the dates position in relation to the week it is in (regardless if it overlaps between months). So e.g sunday=1 monday=2 and so on.
这是我的代码:
func getDayOfWeek(today:String)->Int{
var formatter:NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "YYYY-MM-DD"
var todayDate:NSDate = formatter.dateFromString(today)!
var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: todayDate)
var weekDay = myComponents.weekdayOrdinal
return weekDay
}
我知道 NSCalendarUnit.WeekdayOrdinalCalendar
是错误的,但我尝试过我认为大多数逻辑组合.并且还使用了 myComponents.weekdayOrdinal
,例如使用了 mycomponents.day
或 .weekday
.
I know that NSCalendarUnit.WeekdayOrdinalCalendar
is wrong but I have tried I think most logical combinations. And have also messed around with myComponents.weekdayOrdinal
e.g used mycomponents.day
or .weekday
.
以下是我的选择:
static var EraCalendarUnit: NSCalendarUnit { get }
static var YearCalendarUnit: NSCalendarUnit { get }
static var MonthCalendarUnit: NSCalendarUnit { get }
static var DayCalendarUnit: NSCalendarUnit { get }
static var HourCalendarUnit: NSCalendarUnit { get }
static var MinuteCalendarUnit: NSCalendarUnit { get }
static var SecondCalendarUnit: NSCalendarUnit { get }
static var WeekCalendarUnit: NSCalendarUnit { get }
static var WeekdayCalendarUnit: NSCalendarUnit { get }
static var WeekdayOrdinalCalendarUnit: NSCalendarUnit { get }
static var QuarterCalendarUnit: NSCalendarUnit { get }
static var WeekOfMonthCalendarUnit: NSCalendarUnit { get }
static var WeekOfYearCalendarUnit: NSCalendarUnit { get }
static var YearForWeekOfYearCalendarUnit: NSCalendarUnit { get }
static var CalendarCalendarUnit: NSCalendarUnit { get }
static var TimeZoneCalendarUnit: NSCalendarUnit { get }
我不清楚,因为没有 DayOfWeekUnit 选项(或类似的东西).
It is not clear to me since there is no DayOfWeekUnit option (or something similar).
推荐答案
您正在寻找的(如果我理解正确的话)是 NSCalendarUnit.CalendarUnitWeekday
.NSDateComponents
对应的属性是weekday
.
What you are looking for (if I understand the question correctly) is NSCalendarUnit.CalendarUnitWeekday
. The corresponding property of NSDateComponents
is weekday
.
还要注意您的日期格式是错误的(完整规范可以在这里找到:http://unicode.org/reports/tr35/tr35-6.html).
Note also that your date format is wrong (the full specification can be found here: http://unicode.org/reports/tr35/tr35-6.html).
该函数可以稍微简化,使用自动类型推断,您也可以在常量足够的地方使用很多变量.此外,该函数应该返回一个可选的 nil
对于无效的输入字符串.
The function can be simplified slightly, using automatic type inference, also you use variables a lot where constants are sufficient.
In addition, the function should return an optional which is nil
for an invalid input string.
更新了 Swift 3 及更高版本的代码:
func getDayOfWeek(_ today:String) -> Int? {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
guard let todayDate = formatter.date(from: today) else { return nil }
let myCalendar = Calendar(identifier: .gregorian)
let weekDay = myCalendar.component(.weekday, from: todayDate)
return weekDay
}
示例:
if let weekday = getDayOfWeek("2014-08-27") {
print(weekday)
} else {
print("bad input")
}
Swift 2 的原始答案:
func getDayOfWeek(today:String)->Int? {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
if let todayDate = formatter.dateFromString(today) {
let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let myComponents = myCalendar.components(.Weekday, fromDate: todayDate)
let weekDay = myComponents.weekday
return weekDay
} else {
return nil
}
}
这篇关于使用 NSDate 获取星期几的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!