比较来自不同日历的两个日期组件

问题描述:

我想比较两个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。这两个日期都是平等的,并指向同一天。

+3

“的NSDate”是绝对时间点,没有格式,日历,或“天”属性。 JSON格式的日期究竟如何,以及如何“导入”它? - 例如,您可以使用波斯日历将日期从JSON转换为NSDate,并使用默认日历将NSDate转换为NSDateComponents。 –

+0

如果您在同一个NSDate上使用2个NSCalendars不同(我的意思是阳历和波斯),那么通常您没有相同的.day组件。 –

+0

@Hoa任何解决方案? – user3687

您可以使用DateFormatter(请参阅DateFormatter)将NSDate值转换为相同的日历格式。之后,你可以比较它们。

你应该有在这种情况下,您的控制台“真”:

//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") 
} 
+0

没有帮助,仍然是同样的事情。你自己尝试过吗? – user3687

+0

在2日期内调用NSLog(“date:\(YOUR_DATE_VARIABLE)”)以查看它们是否为同一天。 –

+0

这实际上很奇怪,我从这段代码得到的是一个日期转换为波斯日历格式的字符串! let m = DateFormatter() m.calendar = Calendar(identifier:.gregorian) m.dateFormat =“yyyy-mm-dd” let str = m.string(from:day as Date) – user3687