2015-07-10 92 views
-2

我知道这个问题已经有几个问题了,但是无论我对代码做什么,我都会遇到同样的错误。我在模拟器中工作,我的位置设置为我的长/纬度。当我尝试将当前日期转换为零时,分,秒,我总是得到这样的结果:iOS设置日期为MM // DD/YY 00:00:00

2015-07-10 08:53:19.868 xxxxxxxxxxxxxxxxx[2184:7462272] Today at start of day:2015-07-10 04:00:00 +0000 

这里是我的代码:

NSDate* today = [[NSDate alloc] init]; 

    NSCalendar* currentCalendar = [NSCalendar currentCalendar]; 
    NSDateComponents* dateComponents = [currentCalendar components:NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitYear fromDate:today]; 

    NSInteger thisMonth = [dateComponents month]; 
    NSInteger thisDay = [dateComponents day]; 
    NSInteger thisYear = [dateComponents year]; 

    NSDateComponents* dayComponents = [[NSDateComponents alloc] init]; 
    [dayComponents setDay:thisDay]; 
    [dayComponents setMonth:thisMonth]; 
    [dayComponents setYear:thisYear]; 


    NSDate* todayAtMidnight = [currentCalendar dateFromComponents:dayComponents]; 

    NSLog(@"Today at start of day:%@", todayAtMidnight); 

即使添加

[dayComponents setHour:0]; the hour still comes out as 4. 

什么我做错了吗?

回答

1

为了得到今天开始,你可以使用

NSCalendar *calendar = [NSCalendar currentCalendar]; 

NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit 
              fromDate:[NSDate date]]; 

[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 

NSLog(@"date %@", [calendar dateFromComponents:components]); 

请确保您有正确的时区

+0

Upvoted大家,但把你的,因为我已经使用日期组件。感谢大家的帮助。 – PruitIgoe

1

2015-07-10 04:00:00 +0000是UTC,而不是当地时区。

要在当地时区显示出来,使用NSDateFormatter:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm"; 
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
NSLog([dateFormatter stringFromDate:todayAtMidnight]); 
1

由于系统时区为UTC,因此请使用NSDateFormatter

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

[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

NSDate * curDate = [formatter dateFromString:[NSDate date]]; 

然后你会得到2015-07-10 00:00:00

+0

如何将NSDate格式提供给DateFromString方法? –

相关问题