NSDateFormatter如何工作?

时间:2016-12-26 06:27:00

标签: ios objective-c nsstring nsdate nsdateformatter

我创建了一个下面的方法,我可以发送dateString,InputFormat& OutputFormat以及如下。

- (NSString *)InstanceAwesomeFormatterunformattedDate:(NSString*)unformattedDate inputFormat:(NSString*)inputFormat outPutFormat:(NSString*)outPutFormat{

    //unformattedDate is 13 july 1989
    //inputFormat is @"dd MMMM yyyy" 
    //outPutFormat is @"dd"

    NSDateFormatter *myDateFormattr = [[NSDateFormatter alloc] init];

    [myDateFormattr setDateFormat:inputFormat];

    NSDate *date = [myDateFormattr dateFromString:unformattedDate];
    //Why date is 1990-07-12 18:30:00 +0000
    [myDateFormattr setDateFormat:outPutFormat];

    NSString *FinalExpiryDateForUserProfile = [myDateFormattr stringFromDate:date];
    // FinalExpiryDateForUserProfile is 13 which is correct
    return FinalExpiryDateForUserProfile;

}

我试图理解为什么日期打印12而不是13。 任何想法

2 个答案:

答案 0 :(得分:2)

您需要使用区域设置

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd"];
NSLocale *enLocale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:enLocale];

答案 1 :(得分:0)

问题在于时区,您可以像这样设置时区:

NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];
[myDateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

您可以根据自己的要求添加任何时区而不是GMT。如果您根据自己的设置设置了合适的时区,那么设置NSLocale并不是真正的强制要求。