我从year服务获得了一个MM00yyyy格式的日期--它只是两位数的月份,后跟两个0,然后是四位数的年份。当我这样做的时候:
NSString *expDate = @"12001975";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM00yyyy"];
NSDate postDate = [dateFormat dateFromString:expDate];由于某种原因,[dateFormat dateFromString]返回nil。我也尝试过MMddyyyy和MM'0''0'yyyy,但这两种方法都没有成功。我正在转换一个类似的日期,除了0实际上是使用相同方法没有问题的日期。
发布于 2011-06-30 04:30:22
要使其正常工作,我只需使用以下模式MMHHyyyy。由于您只需要日期而不一定需要小时,因此HH将使用00将时间设置为第零小时,因此您将获得您正在查找的日期。再说一次,这只是一个技巧和变通方法,只是为了解决你当前的问题。
发布于 2011-06-30 04:25:59
看看苹果的Date Formatting Guide吧。“使用格式字符串指定自定义格式”一节列出了各种iOS版本支持的用于指定格式字符串的所有不同标准。我会说"00“是不允许的,所以这就是"MM00yyyy”失败的原因。同样,"MMddyyyy“也失败了,因为没有一天可以是"00”。
我不知道你是否能更幸运地使用UNIX函数,就像Apple文档中建议的那样:
对于固定的、未本地化的格式的日期和时间,有时使用标准C库函数strptime_l和strftime_l可能会更容易、更有效。
请注意,C库也有当前语言环境的概念。为了保证固定的日期格式,您应该将NULL作为这些例程的loc参数传递。这会导致他们使用POSIX (也称为C locale),它等同于Cocoa的en_US_POSIX语言环境,如本例所示。
struct tm sometime;
const char *formatString = "%Y-%m-%d %H:%M:%S %z";
(void) strptime_l("2005-07-01 12:00:00 -0700", formatString, &sometime, NULL);
NSLog(@"NSDate is %@", [NSDate dateWithTimeIntervalSince1970: mktime(&sometime)]);
// Output: NSDate is 2005-07-01 12:00:00 -0700发布于 2011-06-30 04:19:05
正确的格式化字符串看起来更像是艺术而不是科学。我建议您创建一个不包含00的新字符串,然后使用"MMyyyy“进行DateFromatter处理。
虽然这可能不是“正确”的方法,但它应该很快就能解决你的问题。
https://stackoverflow.com/questions/6526575
复制相似问题