Ich habe eine Methode erstellt, die eine Zeichenfolge in der Form "JJJJ-MM-TT" aufnehmen und ein Int ausspucken soll, das die Datumsposition in Bezug auf die Woche darstellt, in der sie sich befindet (unabhängig davon, ob sie sich zwischen Monaten überschneidet). Also zB Sonntag = 1 Montag = 2 und so weiter.
Hier ist mein Code:
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
}
Ich weiß, dass NSCalendarUnit.WeekdayOrdinalCalendar
das falsch ist, aber ich habe versucht, die logischsten Kombinationen zu finden. Und habe auch mit myComponents.weekdayOrdinal
zB gebrauchtem mycomponents.day
oder herumgespielt .weekday
.
Hier sind meine Optionen für die Verwendung:
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 }
Es ist mir nicht klar, da es keine DayOfWeekUnit-Option (oder ähnliches) gibt.
swift
nsdate
nscalendar
Boidkan
quelle
quelle
Antworten:
Was Sie suchen (wenn ich die Frage richtig verstehe) ist
NSCalendarUnit.CalendarUnitWeekday
. Die entsprechende Eigenschaft vonNSDateComponents
istweekday
.Beachten Sie auch, dass Ihr Datumsformat falsch ist (die vollständige Spezifikation finden Sie hier: http://unicode.org/reports/tr35/tr35-6.html ).
Die Funktion kann mithilfe der automatischen Typinferenz leicht vereinfacht werden. Außerdem verwenden Sie häufig Variablen, bei denen Konstanten ausreichend sind. Außerdem sollte die Funktion eine Option zurückgeben, die
nil
für eine ungültige Eingabezeichenfolge gilt.Aktualisierter Code für Swift 3 und höher:
Beispiel:
Ursprüngliche Antwort für Swift 2:
quelle
func getDayOfWeek(today:String)->Int?
. Wenn Sie das optionale Auspacken erzwingen, stürzt es immer noch ab, nicht wahr?if let ...
auch mit implizit entpackten Optionen funktioniert.Schnelle 3 & 4
Das Abrufen der Wochentagsnummer wird in Swift 3 erheblich vereinfacht, da dies
DateComponents
nicht mehr optional ist. Hier ist es als Erweiterung:Wenn Sie nach der schriftlichen, lokalisierten Version des Wochentags suchen:
quelle
Wenn Sie den vollen "Sonntag", "Montag", "Dienstag", "Mittwoch" usw. wollen.
BEARBEITEN: Es gibt tatsächlich ein eingebautes Format, das lokalisierte Tagesnamen zurückgibt:
Meine vorherige Lösung (nur für Englisch):
Sie müssen Kalender und Komponenten nicht auspacken, sie werden durch das Foundation Framework garantiert.
Verwendung:
quelle
Die einfache Antwort (schnell 3):
quelle
Es gibt einen einfacheren Weg. Übergeben Sie einfach Ihr String-Datum an die folgende Funktion, es gibt Ihnen den Tagesnamen :)
quelle
In meinem Fall war ich nach einer Drei-Buchstaben-Zeichenfolge für jeden Tag. Ich habe die Funktion von @Martin R wie folgt geändert:
quelle
dateFormat
Verwendung let Wochentag = Datum (). Wochentagsname
quelle
Swift 3 Datumsverlängerung
quelle
Mit dieser Tabelle date_formats können Sie Ihr Datum in verschiedene Formate konvertieren. Mein kürzester Code:
quelle
Die praktische Lösung ...
Beachten Sie, dass die Ergebnisse die ganzen Zahlen eins bis sieben sind.
(Nicht null bis sechs.)
und dann ...
quelle
Hier gibt es bereits viele Antworten, aber ich denke, es gibt eine andere, vielleicht bessere Möglichkeit, dies mit den richtigen
Calendar
APIs zu tun .Ich würde vorschlagen, den Wochentag mit der
weekdaySymbols
Eigenschaft vonCalendar
( docs ) in einer Erweiterung aufDate
:Dies erfordert die Initialisierung einer
Date
ersten, was ich mit einem benutzerdefinierten tun würdeDateFormatter
:Dies kann dann aufgerufen werden mit:
Warum ich das bevorzuge:
dayOfWeek
Zeitzonen müssen nicht berücksichtigt werden, da der Kalender des Benutzers verwendet wird. Einige der anderen Lösungen hier zeigen den falschen Tag an, da Zeitzonen nicht berücksichtigt werden.DateFormatter
und diese stattdessen verwenden?weekdaySymbols
ist für Sie lokalisiert.weekDaySymbols
kann durch andere Optionen wieshortWeekdaySymbols
"Mo", "Di" usw. ersetzt werden.Bitte beachten Sie: In diesem Beispiel werden
DateFormatter
auch Zeitzonen oder Gebietsschemas nicht berücksichtigt. Sie müssen sie für die gewünschten Einstellungen festlegen. Wenn die Daten immer genau sind, sollten Sie die Zeitzone festlegenTimeZone(secondsFromGMT: 0)
.quelle
weekdaySymbols
, dankeSWIFT 5 - Wochentag
Datumsverlängerung basierend auf Fatties Antwort
quelle
Ab dem Datum brauchte ich ein paar weitere Zeichenfolgen, einschließlich des Datums der Woche (z. B. "5.") und des Monats des Jahres (z. B. August). Im Folgenden sind alle drei Funktionen aufgeführt, die ich basierend auf der Funktion von @Martin R erstellt und so geändert habe, dass 3 Zeichenfolgen zurückgegeben werden:
quelle
SWIFT 2.0-Code zur Darstellung der aktuellen Woche ab Montag.
@IBAction func show (Absender: AnyObject) {
quelle
Dieser Code soll die gesamte aktuelle Woche finden. Es ist in Swift 2.0 geschrieben:
Die Ausgabe sieht folgendermaßen aus:
14. März (Montag) 15. März (Dienstag) 16. März (Mittwoch) 17. März (Donnerstag) 18. März (Freitag) 19. März (Samstag) 20. März (Sonntag)
quelle
Swift 3: Xcode 8-Hilfsfunktion:
quelle
Damit Swift4 den Wochentag vom String erhält
quelle