1. ホーム
  2. swift

[解決済み] NSDateを使用して曜日を取得する

2023-01-14 18:03:47

質問

YYYY-MM-DD"形式の文字列を受け取り、その週に関する日付の位置を表すintを吐き出すことになっているメソッドを作成しました(月が重なっているかどうかにかかわらず)。つまり、例えばsunday=1 monday=2 といった具合です。

以下は私のコードです。

    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 .

何を使うか、私の選択肢は以下のとおりです。

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オプション(のようなもの)がないので、よくわからない。

どのように解決するのですか?

あなたが探しているのは(私が質問を正しく理解しているなら)、次のとおりです。 NSCalendarUnit.CalendarUnitWeekday . の対応するプロパティは NSDateComponentsweekday .

また、日付の書式も間違っていることに注意してください ( 完全な仕様はこちらで確認できます。 http://unicode.org/reports/tr35/tr35-6.html ).

この関数は、自動型推論を使って少し単純化することができます。また、定数で十分なところ、変数をたくさん使っています。 さらに、この関数はオプションとして nil であるオプショナルを返すようにします。

のコードを更新しました。 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")
}

のオリジナル回答 スウィフト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
    }
}