我使用以下代码从字符串中创建NSDate
:
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLog(@"The date from string: %@", [df dateFromString:@"2012-01-31 01:32:30"]);
我在结果中看到的是:
The date from string: 2012-01-31 07:32:30 +0000
这显然不正确。
你知道为什么它会在我的结果日期增加6个小时以及如何修复它吗?
答案 0 :(得分:8)
NSLog
日期不是显示带时区的日期的好方法,而是使用NSDateFormatter
获取所需时区的字符串。
NSDate
是基于UTC的,可以使用NSDateFormatter
为任何时区正确显示的一个真实时间。
来自Apple NSDate
文档:
解析包含日期的字符串并生成字符串 日期的表示,你应该使用一个实例 使用dateFromString:和stringFromDate方法的NSDateFormatter: 分别参见“日期格式化程序”了解更多详情。
示例代码:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [df dateFromString:@"2012-01-31 01:32:30"];
NSLog(@"The date from string: %@", date);
NSString *stringFromDate = [df stringFromDate:date];
NSLog(@"stringFromDate: %@", stringFromDate);
NSLog输出:
字符串的日期:2012-01-31 06:32:30 +0000
stringFromDate:2012-01-31 01:32:30