从NSString创建NSDate

时间:2012-01-31 19:05:09

标签: objective-c nsdate nsdateformatter

我使用以下代码从字符串中创建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个小时以及如何修复它吗?

1 个答案:

答案 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