将NSDate从日历转换为另一个日历

时间:2012-10-31 13:18:12

标签: objective-c nsdate uidatepicker nscalendar

我在这里遇到麻烦。花了我几个小时但没有用。请记住,我检查了StackOverFlow的问题,但是没有任何修复。

当我将_date对象从Gregorian转换为Hijri时,它不会转换。我知道,因为当我打印它时它仍然给我Gregorian天。这让我感到很麻烦,因为我想setDate UIDatePicker并且设置错误,因为_dategregorian而我的UIDatePicker对象日历设置为{{ 1}}

setCalendar:_hijriCalendar

注意:伙计们,我不想只打印日期。我知道使用//DATE SETTING _date = [NSDate date]; _hijriCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSIslamicCalendar]; _gregCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; unsigned units = NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents *currentDateComponents = [_hijriCalendar components:units fromDate:[NSDate date]]; NSDate *islamicDate =[_hijriCalendar dateFromComponents:currentDateComponents]; NSLog(@" Current Date: %@",islamicDate); //this outputs gregorian current date not Hijri 设置到正确的NSDateFotmatter对象将完成这项工作。但是我想将日期转换为新日期以将其设置为NSCalendar。我希望你们明白我的意思。

2 个答案:

答案 0 :(得分:3)

NSDate对象表示任何日历,时区或相对性无论的时刻(最后一个通常被认为是基于地球的非问题)计算机科学。)

当您通过任何方式创建NSDate的实例时,它仅存储为自固定时间点以来的秒数(格林威治标准时间2001年1月1日凌晨00:00,以及iOS和OS X。)

因此,将日期从格里高利转换为Hijri不会任何事情,因为固定时刻保持不变。

如果您具体告诉我们您希望在Gregorian和Hijri之间发生的尚未发生的转变,我们可以提出另一种行动方案。

答案 1 :(得分:1)

您根本不需要进行任何转换。

NSLog打印对象的description方法。由于NSDate仅存储自参考日期以来的秒数,并且未跟踪其所属的日历,因此它使用格里高利历来格式化description方法的日期。

自定义NSDateFormatter以使用您的日历并使用stringFromDate:获取您日期的本地化字符串值。