“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
예 를 들어 used 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
. 의 해당 속성은 NSDateComponents
입니다 weekday
.
또한 날짜 형식이 잘못되었습니다 (전체 사양은 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")
}
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
}
}
답변
Swift 3 및 4
요일 검색 DateComponents
은 더 이상 선택 사항이 아니기 때문에 Swift 3에서 크게 단순화되었습니다 . 여기에 확장 기능이 있습니다.
extension Date {
func dayNumberOfWeek() -> Int? {
return Calendar.current.dateComponents([.weekday], from: self).weekday
}
}
// returns an integer from 1 - 7, with 1 being Sunday and 7 being Saturday
print(Date().dayNumberOfWeek()!) // 4
요일의 서면으로 현지화 된 버전을 찾고 있다면 :
extension Date {
func dayOfWeek() -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE"
return dateFormatter.string(from: self).capitalized
// or use capitalized(with: locale) if you want
}
}
print(Date().dayOfWeek()!) // Wednesday
답변
전체 “일요일”, “월요일”, “화요일”, “수요일”등을 원하는 경우
편집 : 실제로 현지화 된 요일 이름을 반환하는 기본 형식이 있습니다.
extension NSDate {
func dayOfTheWeek() -> String? {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE"
return dateFormatter.stringFromDate(self)
}
}
내 이전 솔루션 (영어 전용) :
extension NSDate {
func dayOfTheWeek() -> String? {
let weekdays = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
]
let calendar: NSCalendar = NSCalendar.currentCalendar()
let components: NSDateComponents = calendar.components(.Weekday, fromDate: self)
return weekdays[components.weekday - 1]
}
}
달력과 구성 요소를 풀 필요가 없으며 기본 프레임 워크에 의해 보장됩니다.
용법:
print(myDate.dayOfTheWeek())
답변
간단한 대답 (swift 3) :
Calendar.current.component(.weekday, from: Date())
답변
제 경우에는 매일 세 글자의 문자열을 따랐습니다. @Martin R의 기능을 다음과 같이 수정했습니다.
func getDayOfWeekString(today:String)->String? {
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
switch weekDay {
case 1:
return "Sun"
case 2:
return "Mon"
case 3:
return "Tue"
case 4:
return "Wed"
case 5:
return "Thu"
case 6:
return "Fri"
case 7:
return "Sat"
default:
print("Error fetching days")
return "Day"
}
} else {
return nil
}
}
답변
더 쉬운 방법이 있습니다. 다음 함수에 문자열 날짜를 전달하면 요일 이름이 제공됩니다. 🙂
func getDayNameBy(stringDate: String) -> String
{
let df = NSDateFormatter()
df.dateFormat = "YYYY-MM-dd"
let date = df.dateFromString(stringDate)!
df.dateFormat = "EEEE"
return df.stringFromDate(date);
}
답변
extension Date {
var weekdayName: String {
let formatter = DateFormatter(); formatter.dateFormat = "E"
return formatter.string(from: self as Date)
}
var weekdayNameFull: String {
let formatter = DateFormatter(); formatter.dateFormat = "EEEE"
return formatter.string(from: self as Date)
}
var monthName: String {
let formatter = DateFormatter(); formatter.dateFormat = "MMM"
return formatter.string(from: self as Date)
}
var OnlyYear: String {
let formatter = DateFormatter(); formatter.dateFormat = "YYYY"
return formatter.string(from: self as Date)
}
var period: String {
let formatter = DateFormatter(); formatter.dateFormat = "a"
return formatter.string(from: self as Date)
}
var timeOnly: String {
let formatter = DateFormatter(); formatter.dateFormat = "hh : mm"
return formatter.string(from: self as Date)
}
var timeWithPeriod: String {
let formatter = DateFormatter(); formatter.dateFormat = "hh : mm a"
return formatter.string(from: self as Date)
}
var DatewithMonth: String {
let formatter = DateFormatter(); formatter.dateStyle = .medium ; return formatter.string(from: self as Date)
}
}
사용법 let weekday = Date (). weekdayName