当电话日历为非格里高里历时,如何以公历格式获取今天的日期?

问题描述

|
NSDate *Now = [[NSDate alloc] init];  
给出当前日期。 但是,如果电话日历不是公历(在模拟器上还有日语和佛教),则当前日期将不是公历。 现在的问题是如何转换为公历日期,或确保从一开始就采用公历格式。这对于某些服务器通信至关重要。 谢谢!     

解决方法

        NSDate只是表示一个时间点,本身没有格式。 将NSDate格式化为字符串,则应使用NSDateFormatter。它具有一个calendar属性,如果将此属性设置为Gregorian日历的实例,则输出格式将与Gregorian样式匹配。
NSDate *now = [NSDate date];

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:gregorianCalendar];
[formatter setDateStyle:NSDateFormatterFullStyle];
[formatter setTimeStyle:NSDateFormatterFullStyle];

NSString *formattedDate = [formatter stringFromDate:now];

NSLog(@\"%@\",formattedDate);

[gregorianCalendar release];
[formatter release];
    ,        选择的答案实际上我无法比较它们。仅显示不足以适合我的项目。 我终于想出了一个解决方案,它隐秘(NSDate)currentDate-> gregorianDate 然后我们可以比较那些NSDate。 请记住,NSDates应该临时使用。(它不附带任何日历)
    NSDate* currentDate = [NSDate date];

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *gregorianComponents = [gregorianCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate];

    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setDay:[gregorianComponents day]];
    [comps setMonth:[gregorianComponents month]];
    [comps setYear:[gregorianComponents year]];
    [comps setHour:[gregorianComponents hour]];
    [comps setMinute:[gregorianComponents minute]];
    [comps setSecond:[gregorianComponents second]];


    NSCalendar *currentCalendar = [NSCalendar autoupdatingCurrentCalendar];
    NSDate *today = [currentCalendar dateFromComponents:comps];