获取iOS当前时间

时间:2014-05-28 13:03:20

标签: ios nsdate nstimezone

我想获得当前时间,为此我知道如何获得它,下面是我的代码

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *weekdayComponents3 = [calendar components:(NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit)fromDate:[NSDate date]];

NSInteger hour = [weekdayComponents3 hour];
NSInteger min = [weekdayComponents3 minute];
NSInteger sec = [weekdayComponents3 second];

现在我只想加1小时到当前时间并立即获得下一小时,例如当前时间下午6点10分我应该下午7点,如果当前时间是下午6点45分,那么我也应该下午7点

为此我写了这段代码

 NSDateComponents *timeZoneComps1=[[NSDateComponents alloc] init];
    [timeZoneComps1 setDay:day];
    [timeZoneComps1 setMonth:month];
    [timeZoneComps1 setYear:year];
    [timeZoneComps1 setHour:hour+1];
    [timeZoneComps1 setMinute:00];
    [timeZoneComps1 setSecond:01];

    NSDate *reqiredDate  = [calendar dateFromComponents:timeZoneComps1];

我使用此代码做对了。

现在开始我的困惑,

如果我将时区设置为UTC

 [calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

并尝试使用上面的代码,我会立即得到下一个小时,例如当前时间是下午6点10分我到晚上7点30分,如果当前时间是下午6点45分,那么我下午7点30分

如果我尝试使用美国时区(通过设备中的设置更改时区而非通过代码更改)的情况相同,这里我会在下一小时立即得到正确,例如当前时间6.10我下午7点到达,如果当前时间是下午6点45分,那么我到了晚上7点

所以我不明白为什么这些不同的行为,其次是如何使它保持一致。

我认为这是由于UTC的偏移,但不确定。

2 个答案:

答案 0 :(得分:0)

如果您通过算法按00:10 UTC,则会得到01:00 UTC。由于IST是UTC + 6:30,在当地时间你看06:40变成07:30。

同样,如果您将本地时间(IST)的18:10转换为UTC,则会得到11:40。运行它,你得到12:00 UTC。转换回当地时间,你得到18:30。

您将不得不回到要求并确定是否应该相对于UTC(不太可能)或当地时间(似乎更合理)确定闹钟时间,然后如果您希望它们删除设置时区是当地时间。

答案 1 :(得分:0)

Swift 4

func getCurrentTime(){

    let strDateTime: String = "Current Time: " + String(describing: Date())

    print(strDateTime)
}