Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone返回的格式日期(空)_Iphone_Date_Nsdateformatter - Fatal编程技术网

iPhone返回的格式日期(空)

iPhone返回的格式日期(空),iphone,date,nsdateformatter,Iphone,Date,Nsdateformatter,我有一个日期,格式如下: 2010年7月16日星期五16:58:46+0000。 要将其转换为2010年7月16日星期五,我尝试了: NSDateFormatter *df = [[NSDateFormatter alloc] init]; for(int i=0; i<[self.data count]; i++) { id celldata = [self.data objectAtIndex:i]; NSString *str = [NSString stringW

我有一个日期,格式如下: 2010年7月16日星期五16:58:46+0000。 要将其转换为2010年7月16日星期五,我尝试了:

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

for(int i=0; i<[self.data count]; i++) {
    id celldata = [self.data objectAtIndex:i];
    NSString *str = [NSString stringWithFormat:@"%@", [celldata objectForKey:@"created_at"]];
    NSLog(@"date for %u is %@",i, str); //this works and writes the date
    [df setDateFormat:@"eee MMM dd HH:mm:ss Z yyyy"];
    NSDate *date = [df dateFromString:str];
    [df setDateFormat:@"eee MMM dd yyyy"];
    NSString *dateStr = [df stringFromDate:date];
    NSLog(@"%@",dateStr);
}
NSDateFormatter*df=[[NSDateFormatter alloc]init];

对于(int i=0;i如果要解析为日期的原始字符串的格式确实为“20081122”,则对“setDateFormat”的第一次调用在两个代码段中都不正确,因为指定的格式不正确

假设[celldata objectForKey:@“created_at”]在第二个代码段中以“20081122”的格式返回日期,则需要更改对setDateFormat的第一次调用,以使用字符串“yyyyymmdd”的正确格式。这将在调用方法“dateFromString”时驱动正确的转换然后,一旦有了NSDate*对象表示形式,就可以在通过stringFromDate将其转换回字符串时使用所需的任何格式

NSString *dateStr = @"20081122";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
//This is the important change here, this format MUST match the format of the string.
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *date = [dateFormat dateFromString:dateStr];  
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
dateStr = [dateFormat stringFromDate:date];  
[dateFormat release];

这可能会对您有所帮助。不久前我遇到了类似的问题,因此我创建了以下方法


定义

#define DATE_TYPE_hhmmss [NSArray arrayWithObjects:@"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYY [NSArray arrayWithObjects:@"M", @"D", @"Y", nil]
#define DATE_TYPE_MMDDYYYYhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYYWWhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"W", @"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYYhhmmssWW [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", @"W", nil]
#define DATE_TYPE_YYYYMMDD [NSArray arrayWithObjects:@"Y", @"M", @"D", nil]
#define DATE_TYPE_YYYYMMDDhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", nil]
#define DATE_TYPE_YYYYMMDDWWhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"W", @"h", @"m", @"s", nil]
#define DATE_TYPE_YYYYMMDDhhmmssWW [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", @"W", nil]
#define DATE_TYPE_FRIENDLY [NSArray arrayWithObjects:@"xx", nil]
日期方法

#define DATE_TYPE_hhmmss [NSArray arrayWithObjects:@"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYY [NSArray arrayWithObjects:@"M", @"D", @"Y", nil]
#define DATE_TYPE_MMDDYYYYhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYYWWhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"W", @"h", @"m", @"s", nil]
#define DATE_TYPE_MMDDYYYYhhmmssWW [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", @"W", nil]
#define DATE_TYPE_YYYYMMDD [NSArray arrayWithObjects:@"Y", @"M", @"D", nil]
#define DATE_TYPE_YYYYMMDDhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", nil]
#define DATE_TYPE_YYYYMMDDWWhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"W", @"h", @"m", @"s", nil]
#define DATE_TYPE_YYYYMMDDhhmmssWW [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", @"W", nil]
#define DATE_TYPE_FRIENDLY [NSArray arrayWithObjects:@"xx", nil]
根据值创建日期

从日期获取字符串

方法
[self-getDateWithMonth:12天:24年:1994]
返回一个通常难以读取的
NSDate
对象,因此您可以使用
[self-getStringFromDate:date-date-date-TYPE:date\u-TYPE\mmddyyyyyy]
来获取
NSDate
对象的字符串

使用定义(宏)指定要在字符串中获取的日期格式

例如:
DATE\u TYPE\u hhmmss
将返回
Hour | Minute | Second
DATE\u TYPE_MMDDYYYY
将返回
月|日|年
DATE_TYPE_mmddyyyyhmmss
将返回
月|日|年|时|分|秒
DATE_TYPE_mmddyyywhhmmss
将返回
Month | Day | Year | Weekday(#)、Hour | Minute | Second

等等

控制台日志

2012-04-29 13:42:15.791 Atomic Class[1373:f803] String of Date: "12|24|1994"
2012-04-29 13:42:15.793 Atomic Class[1373:f803] Month: 12
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Day: 24
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Year: 1994

对周EEE而不是EEE使用Dateformatter

[df setDateFormat:@“EEE MMM dd HH:mm:ss Z yyyy”]


我希望这将对您有所帮助…

可能无法将字符串解析为变量
date
。请尝试执行
NSLog(@“%@”,date)
并查看是否为零。@sch:“0的日期为2012年4月29日11:11:22+0000太阳”因此,第二个序列是不可能工作的,因为第一个日期格式与传入字符串完全不匹配。而且你可能会被12/24“feechure”所咬——检查电话设置以确保12/24开关与你的区域设置匹配(美国为12,其他大多数地方为24)。(出于好奇,你从哪里复制了这段代码?其他人在使用非常相似的数据时遇到了类似的问题——你们都有无关/无用的stringWithFormat调用——所以我猜你使用的是相同的原始源代码。)抱歉,编辑的部分出错。请忽略它
NSDate * date = [self getDateWithMonth:12 day:24 year:1994];
NSString * dateInString = [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY];

int month = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:0] intValue];
int day = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:1] intValue];
int year = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:2] intValue];

NSLog(@"String of Date: \"%@\"", dateInString);
NSLog(@"Month: %d", month);
NSLog(@"Day: %d", day);
NSLog(@"Year: %d", year);
2012-04-29 13:42:15.791 Atomic Class[1373:f803] String of Date: "12|24|1994"
2012-04-29 13:42:15.793 Atomic Class[1373:f803] Month: 12
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Day: 24
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Year: 1994