我正在构建一个函数来从datePicker传递的日期获取中国新年的日期。 convertDateFormater将字符串格式化日期转换为日期对象。我回来的日期是
返回日期=“03年2月3日 - 2030年”年份“1970-05-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 :(得分:3)
在阳历中,有两个时代:当前的#"共同时代" (缩写为" CE"也称为" Anno Domini"或" AD")和"在共同时代之前" (缩写为" BCE"也称为"在基督和#34之前;或" BC")。所以格里高利历上的年份数字含糊不清:" 1970"本身可能意味着" 1970 CE"或者" 1970 BCE"。当没有指定时代时,我们通常会假设CE。
我对中国历法几乎一无所知,但我知道它比公历更多的时代,所以中国历法上的年份数字更加模糊。您发布的代码对时代没有任何作用。因此,我将您的代码复制并粘贴到游乐场并进行了一处更改:
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.