iphone中dateformatter的问题

时间:2011-08-10 06:36:56

标签: iphone xcode nsdate

我的NSDate *newDate值为2011-08-12 13:00:00 +0000。 现在,当我尝试通过dateformatter将其转换为字符串时,如下所示:

NSDateFormatter *dateFormatter= [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd h:mm:ss Z"];

NSString *datestr = [[dateFormatter stringFromDate:newDate] lowercaseString]; 

但我获得的datetr值比newDate值多5:30小时。我不知道我哪里错了。我将datestr的值视为2011-08-12 18:30:00 + 5:30(这是不正确的)。

2 个答案:

答案 0 :(得分:2)

它基本上将时间转换为您当地的时区。如果你不想那只是设置日期格式化程序的时间:

[dateFormatter setTimeZone:[NSTimeZone <use any of the functions below to get your desired one>]];

文档链接: http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSTimeZone_Class/

Creating and Initializing Time Zone Objects
+ timeZoneWithAbbreviation:
+ timeZoneWithName:
+ timeZoneWithName:data:
+ timeZoneForSecondsFromGMT:
– initWithName:
– initWithName:data:
+ timeZoneDataVersion
Working with System Time Zones
+ localTimeZone
+ defaultTimeZone
+ setDefaultTimeZone:
+ resetSystemTimeZone
+ systemTimeZone

答案 1 :(得分:0)

看起来它必须是时区/ UTC的东西。日期可能在全球/世界时间内返回,您想要的是当地时间。

根据IOS文档:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html - 您似乎可以尝试包含区域设置,以指定您想要的时区。

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:118800];

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLocale];

NSLog(@"Date for locale %@: %@",
  [[dateFormatter locale] localeIdentifier], [dateFormatter stringFromDate:date]);