2016-11-30 4 views
0

datePicker에서 전달 된 날짜에서 중국 새해의 날짜를 가져 오는 함수를 작성했습니다. convertDateFormater는 문자열 형식의 날짜를 날짜 객체로 변환합니다. 내가 돌아올 날짜가반환되는 NSDate가 올바르지 않습니다.

반환 날짜 = 연도 "03 2 월 - 2030" "1970년 5월 22일"

하지만 난 "날짜로있는 NSDate()"와 현재 날짜를 실행하는 경우입니다 나는 올바른 결과를 얻는다. 올해 태양력에서 2016 년

func convertDateFormater(date: String) -> Date 
{ 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd"//this your string date format 
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! 
let date = dateFormatter.date(from: date) 
return date! 
} 

var inputDate1 = convertDateFormater(date: "1970-05-22") 
print(inputDate1) 

let chineseCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.chinese)! 
let formatter: DateFormatter = { 
let fmt = DateFormatter() 
fmt.dateStyle = .full 
fmt.timeStyle = .full 
fmt.dateFormat = "dd-MMM-yyyy" 
return fmt 
}() 

var comps = chineseCalendar.components([.year], from: inputDate) 
guard let newYear = chineseCalendar.date(from: comps) else { fatalError("no date for \(comps.year)")} 
let getNewYear = formatter.string(from: newYear) 
print("\(NSDate() as Date) : \(getNewYear) - \(newYear)") 
+0

이 코드는 이상입니다. 그레고리오 력 (1970 년 5 월 22 일)에서 날짜를 만듭니다. 그로부터 당신은 중국 달력 연도를 추출한 다음 그 달력 날짜로부터 완전히 새로운 날을 만듭니다. 그런 다음 새로운 날짜를 그레고리력 형식으로 포맷합니다. 왜? – rmaddy

+0

두 달력이 다르다. 중국의 새해 날짜를 그레고리력 형식으로 바꾸고 싶다. 예를 들어 중국 새해는 2016 년에 "08-Feb-2016"에 있습니다. –

+0

스위프트 놀이터에서 코드를 실행했고'comps '의'year' 구성 요소는'inputDate1'에 대해 47입니다. 그것이 2030 년에 어떻게 될 것인가는 저를 넘어선 것입니다. 나는 중국 달력에 익숙하지 않다. – rmaddy

답변

3

을 위해,이 시대가있다 : 현재의 "일반적인 시대"(약칭 "CE"또한 "서기"또는 "AD"라고도 함) 일반적인하기 전에 " 시대 (BCE) '로 약칭하며 "그리스도 앞에서"또는 "BC"로도 알려짐). 따라서 그레고리력의 연도 숫자는 모호합니다. "1970"자체는 "1970 CE"또는 "1970 BCE"를 의미 할 수 있습니다. 우리는 보통 시대가 지정되지 않은 경우 CE를 가정합니다.

나는 중국 달력에 대해 거의 알지 못하지만, 그레고리력보다 더 많은 시대가 있다는 것을 알고있다. 그래서 중국 달력의 1 년 숫자는 더욱 모호하다. 게시 한 코드는 시대에 대해 아무 것도하지 않습니다. 그래서 복사 놀이터에 코드를 붙여 하나의 변화를 만들어 :

var comps = chineseCalendar.components([.era, .year], from: inputDate) 
//          ^^^^^^ 

출력 :

1970-05-22 00:00:00 +0000 
2016-11-30 01:40:12 +0000 : 06-Feb-1970 - 1970-02-06 06:00:00 +0000 

Indeed, 1970-02-06 was the date of the Chinese new year in 1970 CE on the Gregorian calendar.

+0

당신은 전설, 고마워요. 마술처럼 작동합니다. –