我想获得当前时间,为此我知道如何获得它,下面是我的代码
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的偏移,但不确定。
答案 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)
}