質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2602閲覧

Swift5でのStringからの曜日取得について

samson66

総合スコア35

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/09/24 05:18

4年前の質問(Swift2)の質問を参考にStringからの曜日取得をしようと思ったのですが、あまりにもバージョンが古い為対応しておらずこちらでお聞きします。

Stringからの曜日取得について

var str = "20160808" //ここから何とかして"(月)"という文字列を取得したい。
var youbi = "" //ここに曜日を格納したい。

以下が解決法のようなのですが、エラーが続発してしまい参ってしまっています...。
Swift5での解決法またはアドバイスなどお待ちしてます。

具体的なコード内容(1)

Swift2

1var str = "20160808" 2var insertIdx = str.startIndex.advancedBy(4) 3str.insert("-", atIndex: insertIdx) 4insertIdx = str.startIndex.advancedBy(7) 5str.insert("-", atIndex: insertIdx) 6print(str) //"2016-08-08" 7 8var cal = NSCalendar.currentCalendar() 9let weeks = ["日","月","火","水","木","金","土"] 10 11var dateFormatter = NSDateFormatter() 12dateFormatter.locale = NSLocale(localeIdentifier: "ja") 13dateFormatter.dateFormat = "yyyy/MM/dd" 14var date = (dateFormatter.dateFromString(str)) 15 16let comp = cal.components(NSCalendarUnit.Weekday, fromDate: date!) 17let weekIdx = comp.weekday 18var youbi: String = weeks[weekIdx - 1] 19print(youbi) //"月"

具体的なコード内容(2)

Swift2

1let str = "20160808" 2 3//指定した日付のNSDateを求める(西暦なので"en_US_POSIX"を使う) 4let df = NSDateFormatter() 5df.locale = NSLocale(localeIdentifier: "en_US_POSIX") 6df.dateFormat = "yyyyMMdd" 7let date = df.dateFromString(str) 8//print(date) 9 10//上で求めたNSDateの曜日番号を取得する(1~7が返ってくるので、-1して0~6にする) 11let comps = NSCalendar.currentCalendar().components(.Weekday, fromDate: date!) 12let weekday = comps.weekday - 1 13 14//OSが用意している文字列を利用して曜日を求める(weekdaySymbolsを使えば「○曜日」になる) 15let youbi = NSDateFormatter().shortWeekdaySymbols[weekday] 16print("((youbi))")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2の方とほぼほぼ同じだけど

swift

1let s = "20160808" 2 3let df = DateFormatter() 4df.dateFormat = "yyyyMMdd" 5df.locale = Locale(identifier: "ja_JP") 6 7guard let d = df.date(from: s) else { fatalError() } 8guard let dc = df.calendar?.component(.weekday, from: d) else { fatalError() } 9 10let youbi = df.shortWeekdaySymbols[dc - 1] 11print(youbi)

fatalErrorはちょっと過激なので仕様に合わせて変更してください。

投稿2020/09/24 09:33

MasakiHori

総合スコア3391

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

samson66

2020/09/24 15:28

無事に表示できました! 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問