比较来自不同日历的两个日期组件
问题描述:
我想比较两个NSDates的“日”组件。其中一个日期是从包含日期格式的JSON文件导入的。另一个是设备默认的NSDate()。比较来自不同日历的两个日期组件
这两个日期指向同一天,但一个返回与另一天不同的日子组分。当我登录日期组件时,它们是不同的。
let cal2 = Calendar(identifier: .persian)
if cal2.dateComponents([.day,.month,.year], from: day as Date) == cal2.dateComponents([.day,.month,.year], from: date as Date)
{
t = true
}
其中一个日期是:1395-07-20(在波斯日历),另一个是2016-10-11。这两个日期都是平等的,并指向同一天。
答
你应该有在这种情况下,您的控制台“真”:
//create 2 Date (from Persian calendar and from Gregorian calendar) that point to same day.
let componentPersian = NSDateComponents()
componentPersian.day = 20
componentPersian.month = 07
componentPersian.year = 1395
let date1 = persianCalendar?.dateFromComponents(componentPersian)
let componentGregorian = NSDateComponents()
componentGregorian.day = 11
componentGregorian.month = 10
componentGregorian.year = 2016
let date2 = gregorian?.dateFromComponents(componentGregorian)
//get NSDateComponents of those 2 Date, USING SAME CALENDAR. I use Gregorian in my test.
let components1 = gregorian?.components([.Day, .Month, .Year], fromDate: date1!)
let components2 = gregorian?.components([.Day, .Month, .Year], fromDate: date2!)
//and compare the values.
if (components1?.day == components2?.day
&& components1?.month == components2?.month
&& components1?.year == components2?.year
) {
NSLog("true") //you must see this log in the console.
} else {
NSLog("false")
}
“的NSDate”是绝对时间点,没有格式,日历,或“天”属性。 JSON格式的日期究竟如何,以及如何“导入”它? - 例如,您可以使用波斯日历将日期从JSON转换为NSDate,并使用默认日历将NSDate转换为NSDateComponents。 –
如果您在同一个NSDate上使用2个NSCalendars不同(我的意思是阳历和波斯),那么通常您没有相同的.day组件。 –
@Hoa任何解决方案? – user3687