当我打印日期时
//getting the current date and time
self.date = [NSDate date];
NSLog(@"%@",date);
我得到的日期是正确的,但时间延迟了 6 小时。我的系统时间是正确的。
试试这个
NSLocale* currentLoc = [NSLocale currentLocale];
NSLog(@"%@",[[NSDate date] descriptionWithLocale:currentLoc]);
使用NSDateFormatter
NSDate *today = [NSDate date];
//Create the dateformatter object
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//Set the required date format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//Get the string date
NSString *dateString = [dateFormatter stringFromDate:today];
//Display on the console
NSLog(dateString);
在调试器中记录一个NSDate
有点误导,因为它为您提供特定时区的日历日和时间 - UTC / GMT。但是,NSDate
它根本没有固有的时区或与人类如何感知和思考日期的任何固有关系。相反,它是一个时间戳。像NSDateComponents
, NSTimeZone
, NSDateFormatter
, 等等这样的类都是为了提供人类上下文和格式而存在的。
因此,您看到的是格式化为特定格式和 UTC 时区的时间戳,这是NSDate
在调试器或控制台中打印时始终显示的方式。如果您要计算 UTC 和您自己的时区之间的时区偏移量,您会发现日期代表您给它的时间戳,而不是一个多小时的时间。
您可以设置当前时区以自定义日期格式。
此链接可以提供帮助: https ://stackoverflow.com/a/7213629/456471
默认日期字符串表示可能会将日期格式化为 UTC,而不是您的本地时区(未定义它将使用的确切格式,并且可能会因版本而异,因此您不应依赖它)。如果您需要以特定格式(或特定时区,包括本地时区)格式化日期,则应使用 NSDateFormatter 类;有关详细信息,请参阅数据格式指南和NSDateFormatter 类参考。