我通过字符串参数收到日期,该参数是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
我应该在日期格式化程序的日期格式中更改什么才能获得好日期?
答案 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