2016-10-03 109 views
0

我想比較兩個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

回答

0

您可以使用DateFormatter(請參閱DateFormatter)將NSDate值轉換爲相同的日曆格式。之後,你可以比較它們。

2

你應該有在這種情況下,您的控制檯「真」:

//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