Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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 NSDate的转换非常奇怪_Iphone_Objective C_Ios_Nsdate_Nsdateformatter - Fatal编程技术网

Iphone NSDate的转换非常奇怪

Iphone NSDate的转换非常奇怪,iphone,objective-c,ios,nsdate,nsdateformatter,Iphone,Objective C,Ios,Nsdate,Nsdateformatter,我有时间:上午7:46 我想把它转换成NSDate。我这样做: NSDateFormatter *f = [NSDateFormatter new]; [f setDateFormat:@"h:mm a"]; NSDate *sr = [f dateFromString:@"7:46 am"]; 我得到了1969-12-31 22:46:00+0000 那些时代不一样。为什么会如此混乱?您没有提供日期或时区。。。假设您想表达“今天上午7:42”,您可以使用以下代码: NSDate *curre

我有时间:
上午7:46

我想把它转换成NSDate。我这样做:

NSDateFormatter *f = [NSDateFormatter new];
[f setDateFormat:@"h:mm a"];
NSDate *sr = [f dateFromString:@"7:46 am"];
我得到了1969-12-31 22:46:00+0000


那些时代不一样。为什么会如此混乱?

您没有提供日期或时区。。。假设您想表达“今天上午7:42”,您可以使用以下代码:

NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:7];
[comps setMinute:42];
NSDate *myDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];

myDate的NSLog现在应该为您提供预期的输出(假设您需要)today@7:46am)。

您没有提供日期或时区。。。假设您想表达“今天上午7:42”,您可以使用以下代码:

NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:7];
[comps setMinute:42];
NSDate *myDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];

myDate的NSLog现在应该为您提供预期的输出(假设您需要)today@7:46am)。

由于您只指定希望NSDate引用的时间,而不是日期,因此格式化程序使用的是默认日期(似乎非常接近UNIX纪元)。正如Julio所说,如果希望NSDate引用该特定日期的时间,那么也应该指定当前日期。

因为您只指定希望NSDate引用的时间,而不是日期,所以格式化程序使用的是默认日期(似乎非常接近UNIX纪元)。正如Julio所说,如果希望NSDate指的是特定日期的时间,那么也应该指定当前日期

不,这并不奇怪。NSDateConverter和NSDate正在这里完成它们的预期工作

您正在尝试将
“7:46 am”
转换为日期。它只包含时间。字符串中未指定日期。如果未指定日期,NSDate将默认为
“1970-01-01”
(Unix历元)。因此,在转换字符串后,您将获得日期
“1970-01-01 7:46 am”
。当您尝试在NSLog中显示此信息时,if将显示调整时区偏移值后的日期。我猜你住在日本或韩国。您所在区域的偏移量可能为+09:00。所以它显示减去偏移量的日期。因此您在日志中看到了
“1969-12-31 22:46:00+0000”

您可以使用以下方法将时间设置为特定日期,可能是今天

不,这并不奇怪。NSDateConverter和NSDate正在这里完成它们的预期工作

您正在尝试将
“7:46 am”
转换为日期。它只包含时间。字符串中未指定日期。如果未指定日期,NSDate将默认为
“1970-01-01”
(Unix历元)。因此,在转换字符串后,您将获得日期
“1970-01-01 7:46 am”
。当您尝试在NSLog中显示此信息时,if将显示调整时区偏移值后的日期。我猜你住在日本或韩国。您所在区域的偏移量可能为+09:00。所以它显示减去偏移量的日期。因此您在日志中看到了
“1969-12-31 22:46:00+0000”

您可以使用以下方法将时间设置为特定日期,可能是今天


是否要将当天的NSDate设置为上午7:46?您没有明确说明。是否要将当天的NSDate设置为上午7:46?您没有明确说明。这输出了
2011-06-10 16:03:30+0000
。这输出了
2011-06-10 16:03:30+0000