格式化后NSDateFormatter错误的字符串

时间:2012-10-04 08:35:36

标签: ios nsstring nsdateformatter

我通过字符串参数收到日期,该参数是tempDateString,采用[day month year]格式(例如2005年05月05日):

 NSLog(@"tempdatestring %@", tempDateString);
 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 [dateFormatter setDateFormat:@"dd MM YYYY"];
 NSDate *dayDate = [dateFormatter dateFromString:tempDateString];
 NSLog(@"daydate %@", dayDate);

我的问题是,这两个日志不匹配。输出是:

tempdatestring 04 10 2012
daydate 2011-12-24 22:00:00 +0000

我应该在日期格式化程序的日期格式中更改什么才能获得好日期?

4 个答案:

答案 0 :(得分:8)

2个问题

  • 您的格式错误@"dd MM yyyy" 区分大小写
  • 使用时区获取正确的值[GMT值]

    NSString *tempDateString=@"04 10 2012" ;
    NSLog(@"tempdatestring %@", tempDateString);
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [dateFormatter setDateFormat:@"dd MM yyyy"];
    NSDate *dayDate = [dateFormatter dateFromString:tempDateString];
    NSLog(@"daydate %@", dayDate);
    

答案 1 :(得分:1)

使用%@格式说明符时,将使用在提供的对象上调用的-description方法的返回值。

NSDate -description方法以特定方式输出其值。

您的真正的问题是您的日期格式字符串不正确 - 应该是dd MM yyyy

我把它放在一个示例Xcode项目中:

NSString *s = @"04 11 2012";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd MM yyyy"];
NSDate *d = [df dateFromString:s];
NSDateComponents *c = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:d];
NSLog(@"%@", c);

它给了我以下输出:

2012-10-04 01:53:24.320 dftest[59564:303] <NSDateComponents: 0x100113e70>
    Calendar Year: 2012
    Month: 11
    Leap month: no
    Day: 4

答案 2 :(得分:1)

这样做:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd MM yyyy"];
NSDate *dayDate = [dateFormatter dateFromString:tempDateString];
NSLog(@"daydate %@", dayDate);
NSString *strDate = [dateFormatter stringFromDate:dayDate];
NSLog(@"strDate :%@",strDate);

答案 3 :(得分:1)

NSDateFormatter *form = [[NSDateFormatter alloc] init];
[form setDateFormat:@"dd MM yyyy"];
form.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:-7200.0];
NSDate *dayDate = [form dateFromString:@"05 10 2012"];
NSLog(@"daydate %@", dayDate);
NSString *strDate = [form stringFromDate:dayDate];
NSLog(@"strDate %@",strDate);

将日期格式更改为@"dd MM yyyy"。在此之后,dateFromString仍然可以解析错误的日期(在我的情况下,它是昨天21-00)。为了避免这种情况,我在我的DateFormatter中设置了TimeZone:

form.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:-7200.0];

-7200.0是我的时区,你应该改为你的(“0”设置为格林威治)。此日志后显示如下:

daydate 2012-10-05 02:00:00 +0000
strDate 05 10 2012