Tro*_*ton 3 objective-c xcode4
我运行以下代码:
NSDate*now = [NSDate date];
NSLog(@"now: %@", now);
Run Code Online (Sandbox Code Playgroud)
得到:
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问题?
NSDate默认为通用时区(也称为GMT).
我猜你在东海岸的某个地方,比UTC晚了5个小时.
尝试将此添加到您的日期格式化程序...
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setLocale:[NSLocale currentLocale]];
Run Code Online (Sandbox Code Playgroud)
......你应该看看你当地的时间.
如果要使用指定的区域设置而不是"currentLocale",请为相关区域设置创建NSLocale.
NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLoc];
Run Code Online (Sandbox Code Playgroud)
......实际上那是美国(很可能不是中环).
可以在这里找到更具体的时区帮助......
但是,如果您想显示到期时间,您是否仍然希望它在用户的currentLocale中?
如果查看输出,您会看到日志包含时区:
2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000
^^^^^^
Run Code Online (Sandbox Code Playgroud)
日志的时间戳是本地时间.我假设你所在的时区比UTC早5个小时.
一个NSDate的是指在某个特定时间点.您可以根据需要显示此项; 通常使用NSDateFormatter.
这就是为什么你会看到很多建议反对存储时间,或者日期不是NSDate.如果您尝试将其存储为字符串,那么稍后在尝试处理不同时区的显示时会遇到很多麻烦.