我运行以下代码:
NSDate * now = [NSDate date];
NSLog(@"now: %@", now);
并获得:
2011-09-16 16:14:16.434 iSavemore [1229:7907]现在:2011-09-16 21:14:16 +0000
你可以看到我在16:14:16(下午4:14)运行这个,但NSDate正在返回21:16:16(晚上9:14!)。这是Xcode4问题还是NSDate问题?
答案 0 :(得分:9)
NSDate默认为通用时区(也称为GMT)。
我猜你在东海岸的某个地方,比UTC晚了5个小时。
尝试将此添加到日期格式化程序中...
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setLocale:[NSLocale currentLocale]];
......你应该看看当地时间。
如果要使用指定的区域设置而不是“currentLocale”,请为相关区域设置创建NSLocale。
NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLoc];
......实际上那是美国(很可能不是中环)。
此处可以找到更具体的时区帮助...
但是,如果你想显示到期时间,你还不想在用户的currentLocale中使用它吗?
答案 1 :(得分:5)
如果查看输出,您会看到日志包含时区:
2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000
^^^^^^
日志的时间戳是当地时间。我假设你所在的时区比UTC早5个小时。
NSDate 是指某个特定时间点。您可以根据需要显示此项;通常使用NSDateFormatter。
这就是为什么你会看到许多反对存储时间或日期不是NSDate的建议。如果您尝试将其存储为字符串,那么稍后在尝试处理不同时区的显示时会遇到很多麻烦。
答案 2 :(得分:0)
尝试将NSDate的时区设置为符合您需要的时区,例如[NSTimeZone localTimeZone]
答案 3 :(得分:-1)
这里只是一个疯狂的猜测,但也许它与时区有关?