1

我尝试将我的对象转换NSStringNSDate对象,但NSDateFormatter返回一个奇怪的值。

这是代码:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm"]; 
NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00"];
[dateFormat release];

date值为2012-08-14 21:00 +0000NSString价值和价值之间有3小时的差异NSDate。我想我错过了一些东西,但我不知道是什么。

4

4 回答 4

6

这就是我使用的:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; 

NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00:00 +0000"];
NSLog(@"\n\n  DATE: %@ \n\n\n", date);

是时区,因此+0000请确保使用您的时区,例如+0400.

编辑:如果你不能改变字符串,你可以使用这个代码来做到这一点:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm"]; 
[dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00"];
于 2012-07-10T08:10:11.777 回答
0

我知道 NSDate 持有格林威治时间,所以如果你在莫斯科时区,一切都是正确的

于 2012-07-10T08:05:33.790 回答
0

在 NSDate 的目标 c 中,如果您没有设置 setTimeZone,NSDate 会将默认时区作为 localTimeZone。因此,如果您需要获取以 NSString 字符串格式提供的确切日期,则需要将 TimeZone 设置为 UTC。按照示例代码进行操作,我想它会对您有所帮助。

NSDateFormatter *loacalformatter=[[NSDateFormatter alloc]init];
[loacalformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *localDate =[loacalformatter dateFromString:@"2012-08-15 00:00"];
NSLog(@"localDate :%@",localDate);


NSDateFormatter *UTCformatter=[[NSDateFormatter alloc]init];
[UTCformatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[UTCformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *UTCDate =[UTCformatter dateFromString:@"2012-08-15 00:00"];
NSLog(@"UTCDate :%@",UTCDate);
UTCDate :2012-08-15 00:00 +0000 (GMT+00:00)
于 2013-08-10T04:15:49.193 回答
-1

正如评论中所建议的,如果您收到的日期是 UTC,那么您需要将其转换为您当地的时区。Apple 建议您在显示日期时始终使用正确配置的 NSDateFormatter 来处理本地化问题。

下面是一些将 NSDate 转换为 NSString 的示例代码:

NSDate *date = // initialised elsewhere

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
dateFormat.locale = [NSLocale currentLocale];
dateFormat.timeZone = [NSTimeZone localTimeZone];
dateFormat.timeStyle = NSDateFormatterShortStyle;
dateFormat.dateStyle = NSDateFormatterShortStyle;    
dateFormat.locale = [NSLocale currentLocale];
NSString *dateAsString = [dateFormat stringFromDate:date];
于 2012-07-10T08:19:45.647 回答