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

Objective c 将NSDate从日历转换为另一个日历,objective-c,nsdate,uidatepicker,nscalendar,Objective C,Nsdate,Uidatepicker,Nscalendar,我这里有麻烦。花了我几个小时,但没用。请记住,我检查了StackOverFlow的检查以获得修复,但没有任何修复 当我将\u date对象从Gregorian转换为Hijri时,它不会转换。我知道这一点,因为当我打印它的时候,它仍然给我一个格里高利日。这让我很烦恼,因为我想设置UIDatePicker的setDate,它设置不正确,因为\u date是gregorian,而我的UIDatePicker对象日历设置为setCalendar:\u hijriCalendar //DATE SETTI

我这里有麻烦。花了我几个小时,但没用。请记住,我检查了StackOverFlow的检查以获得修复,但没有任何修复

当我将
\u date
对象从
Gregorian
转换为
Hijri
时,它不会转换。我知道这一点,因为当我打印它的时候,它仍然给我一个
格里高利日。这让我很烦恼,因为我想设置
UIDatePicker
setDate
,它设置不正确,因为
\u date
gregorian
,而我的
UIDatePicker
对象日历设置为
setCalendar:\u 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
对象将完成这项工作。但我想将日期转换为新日期,以将其设置为我的
UIDatePicker
。我希望你们明白我的意思。

你们根本不需要做任何转换

NSLog
打印对象的
说明
方法。由于
NSDate
只存储自参考日期起的秒数,并且不跟踪它所属的日历,因此它使用公历来格式化
说明
方法的日期


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

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

NSLog
打印对象的
说明
方法。由于
NSDate
只存储自参考日期起的秒数,并且不跟踪它所属的日历,因此它使用公历来格式化
说明
方法的日期


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

一个
NSDate
对象表示一个时间点,与任何日历、时区或相对性无关(最后一个问题通常被认为是地球计算机科学中不存在的问题。)

当您通过任何方式创建
NSDate
的实例时,它仅存储为自某个固定时间点以来的秒数(对于iOS和OS X,2001年1月1日格林尼治标准时间上午12:00)

因此,将日期从公历转换为Hijri没有任何作用,因为固定的时刻保持不变


如果您具体告诉我们,您希望在格里高利和希吉里之间发生哪些尚未发生的转换,我们可以建议另一种做法。

一个
NSDate
对象代表一个时间点,而不考虑任何日历、时区或相对性(最后一个问题通常被认为是地球计算机科学中不存在的问题。)

当您通过任何方式创建
NSDate
的实例时,它仅存储为自某个固定时间点以来的秒数(对于iOS和OS X,2001年1月1日格林尼治标准时间上午12:00)

因此,将日期从公历转换为Hijri没有任何作用,因为固定的时刻保持不变


如果您具体告诉我们,您希望在Gregorian和Hijri之间发生哪些尚未发生的转换,我们可以建议另一种做法。

就是这样,我不想只打印。我使用打印来检查为什么我的
UIDatePicker
未设置为正确的
Hijri
日期。我知道设置
NSDateFormatter
to
HijriCalendar
将打印正确的日期。但是我想使用
\u date
对象来设置我的
UIDatePicker
猜测您在获取
currentDateComponents
时打算使用
\u HijriCalendar
的intead。换句话说,这将产生相同的e> NSDate
值。对吗?如果我使用
\u gregCalendar
而不是
\u HijriCalendar
我会得到值
2574-06-20
和我的UIDatePicker毁灭日期。我只需要在
\u HijriCalendar
中获得正确的日期,将其设置为我的UIDatePicker并解决这个问题“叹气”。这就是问题所在,我不想只打印。我使用打印来检查为什么我的
UIDatePicker
未设置为正确的
Hijri
日期。我知道将
NSDateFormatter
设置为
HijriCalendar
将打印正确的日期。但我想使用
\u date
对象来设置我的
UIDatePicker
猜测您打算在获取
currentDateComponents
时使用
\u gregCalendar
集成的
\u hijriCalendar
。以其他方式,这将产生相同的
NSDate
值。对吗?如果我使用
\u gregCalendar
而不是
\u hijriCalendar
,我会得到值
2574-06-20
和我的UIDatePicker破产日期e、 我只需要在
\u HijriCalendar
中获取正确的日期,将其设置为我的UIDatePicker并解决此问题“叹气”。这是一个很好的解释!我的问题主要出在
UIDatePicker
上。今天Hijri的日期是15 Dul Hijja 1433。但是当我打开应用程序时,
UIDatePicker
没有设置为默认的当前日期。它被设置为27 Dul Qidah 1433,这是一个月前的日期。尽管
UIDatePicker
setDate:[NSDate date date]iOS6和苹果修复了所有这些错误。但是在我的设备上,IOS5是一个麻烦的问题。因为OS的新版本解决了这个问题,它强烈地暗示了这是一个苹果发现并独立修复的bug。如果是这样的话,你应该考虑需要IOS 6。如果你必须支持iOS 5,请警告THA。t试图绘制日期的差异充满了危险,因为不能保证随着时间的推移,差异是恒定的。是的,但他们的日期选择器的许多应用程序在ios5上运行良好。我有一个问题,我不知道如何解决。让我给你这个