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

时间:2011-06-15 09:06:29

标签: objective-c gregorian-calendar

NSDate *now = [[NSDate alloc] init];  

给出当前日期。

但是,如果电话日历不是格里高利(在模拟器上还有日语和佛教徒),则当前日期将不是格里高利。

现在的问题是如何转换为公历日期或确保它从一开始就是格里高利格式。这对于某些服务器通信至关重要。

谢谢!

2 个答案:

答案 0 :(得分:14)

NSDate只代表一个时间点,本身没有格式。

将NSDate格式化为例如一个字符串,你应该使用NSDateFormatter。它有一个日历属性,如果您将此属性设置为公历的实例,则输出的格式将与格里高利风格匹配。

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];

答案 1 :(得分:1)

实际上,我无法比较它们。只显示我的项目是不够的。

我终于想出了一个隐蔽的解决方案(NSDate)currentDate - > gregorianDate 然后我们可以比较那些NSDates。

请记住,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];