从NSString创建一个NSDate

3
我使用以下代码将字符串转化为NSDate:
```swift let dateString = "2019-10-31T01:30:00.000Z" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" let date = dateFormatter.date(from: dateString) ```
这个代码可以将符合格式“yyyy-MM-dd'T'HH:mm:ss.SSSZ”的字符串转化为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个回答

8
使用NSLog来显示带有时区的日期并不是一个好方法,相反,请使用NSDateFormatter来获取所需时区的字符串。 NSDate基于协调世界时(UTC),可以使用NSDateFormatter正确地显示任何时区的时间。
苹果的NSDate文档中写道:
“要解析包含日期的字符串并生成日期的字符串表示形式,您应该使用NSDateFormatter的实例分别使用dateFromString:和stringFromDate:方法。有关详细信息,请参阅“日期格式化程序”。”
示例代码:
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接