1

我通过字符串参数接收日期,它是 tempDateString,格式为 [日月年](例如 01 05 2005):

 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

4 回答 4

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);
    
于 2012-10-04T09:06:10.703 回答
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
于 2012-10-04T08:38:38.360 回答
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);
于 2012-10-04T08:48:42.657 回答
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
于 2012-10-04T09:04:26.303 回答