Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.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
Ios 使用NSDateformatter格式化日期时的设置时间_Ios_Iphone - Fatal编程技术网

Ios 使用NSDateformatter格式化日期时的设置时间

Ios 使用NSDateformatter格式化日期时的设置时间,ios,iphone,Ios,Iphone,我有以下代码将字符串转换为日期。是否可能将时间设置为“00:00:00”,而不是当前时间 NSDateFormatter *dateformat = [[NSDateFormatter alloc] init]; [dateformat setDateFormat:@"yyyy-MM-dd"]; NSString *str = @"2014-08-08"; NSDate *dt = [dateformat dateFromString:str]; 因为我是在15:20做这个手术的,所以这里的d

我有以下代码将字符串转换为日期。是否可能将时间设置为“00:00:00”,而不是当前时间

NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
[dateformat setDateFormat:@"yyyy-MM-dd"];
NSString *str = @"2014-08-08";
NSDate *dt = [dateformat dateFromString:str];
因为我是在15:20做这个手术的,所以这里的dt为“2014-08-08 15:20:00+0000”

编辑:我正在使用此日期稍后将其转换为整数以将其存储在数据库中:

int t = [dt timeIntervalSince1970];

如果使用NSLog显示日期
dt
,您将看到日期描述方法提供了什么。如果希望以适合的特定方式查看日期,请使用
NSDateFormatter
格式化日期

例如:

NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
[dateformat setDateFormat:@"yyyy-MM-dd"];
NSString *str = @"2014-08-08";
NSDate *dt = [dateformat dateFromString:str];

NSDateFormatter *displayDateformat = [[NSDateFormatter alloc] init];
[displayDateformat setDateFormat:@"yyyy-MM-dd"];
NSString *displayDateString = [displayDateformat stringFromDate:dt];
NSLog(@"displayDateString: %@", displayDateString);
输出:

2014-08-08


根据Apple docs的注释:“此方法返回相对于绝对参考日期的时间值,即2001年1月1日格林尼治标准时间的第一个瞬间。”

一个好的做法是使用NSDATE组件

NSDate *yourDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:yourDate];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
// Set the time components manually
[dateComponents setHour:0];
[dateComponents setMinute:0];
[dateComponents setSecond:0];            

yourDate = [calendar dateFromComponents:dateComponents];
更新

iOS8:

[[NSCalendar currentCalendar] startOfDayForDate:[NSDate date]];

@Zaph这也是正确的,但使用日期组件的结果是+1,这是您应该做的。问题是显示格式没有解决。虽然它可能会更好,但它会产生与操作代码相同的结果。@Zaph问题是关于
它是否会将时间设置为“00:00:00”,而不是当前时间
,也不是关于格式化
startOfDayForDate
的输出+1。iOS8的
NSCalendar
中添加了很多内容。哦,等等。我现在明白了。我还以为你是询问者呢。但这不会补偿设置为当前时间的时间。它将停止显示时间的任何字符串。您不需要第二个
NSDateFormatter
,只需重复使用
dateformat
,因为
dateformat
displayDateformat
中的格式相同。好的,是的,除了重复两个相同的日期格式化程序之外,这是正确的。这是一个显示问题。我已经编辑了这个问题。我没有使用NSLog的日期,而是将其转换为整数以存储在db中。什么类型的数据库?核心数据?如果是这样,您不需要转换。无论哪种方式,这种转换都很好。但要确保你使用的是
NSInteger
。整个问题都没有意义。你所做的是正确的。要获取字符串“2014-08-08 15:20:00+0000”,必须在某个位置显示它。这让你觉得有错误。没有。欢迎使用NSDate。处理时区是您必须做的事情。sqlite使用FCModel包装器。为什么使用NSInteger而不是int?NSInteger将根据设备使用正确的32/64位版本。int是任一设备上的32位int。与CGFloat相同,而不是float。等不管怎样,只要用你的日期就行了。这是正确的。正是时区的差异使你认为它是不正确的