将NSDate从GMT + 0(伦敦)转换为用户的TimeZone

时间:2011-05-29 00:39:36

标签: objective-c nsdate

我从我的MySQL数据库中检索到的NSString(日期)是GMT +000(伦敦),其格式如下:12/05/2011 5:21:29 PM。

我想知道如何将其转换为用户的时区,以便如果用户在中国,那么它将是中国时区的日期。

2 个答案:

答案 0 :(得分:4)

在输入setTimeZone:上使用NSDateFormatter。 (在内部,NSDate与时区无关。)

E.g:

// The default time zone for a formatter is the time zone of the user's locale
NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init];
[localFormatter setDateStyle:NSDateFormatterShortStyle];
[localFormatter setTimeStyle:NSDateFormatterMediumStyle];

NSDateFormatter *gmtFormatter = [[NSDateFormatter alloc] init];
[gmtFormatter setDateFormat:@"MM/dd/yyyy h:mm:ss a"];
[gmtFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate *date = [gmtFormatter dateFromString:gmtDateString];
NSString *locallyFormattedDate = [localFormatter stringFromDate:date];

[localFormatter release];
[gmtFormatter release];

虽然......如果在指定时间内的DST设置与当前设置不同,我认为这不会考虑DST。

答案 1 :(得分:-2)

使用initWithTimeInterval:sinceDate:制作添加/减去小时数的日期对象。它将在几秒钟内,因此提前3小时将是initWithTimeInterval:10800 sinceDate:(originalDate)。如果您在该对象上调用-description,则会给出的格式为(来自Apple文档)

  

。的字符串表示   接收器采用国际格式   YYYY-MM-DD HH:MM:SS±HHMM,其中±HHMM   表示时区偏移量   GMT的小时和分钟(for   例如,“2001-03-24 10:45:32 +0600”)。

所以它将包括时间间隔。

编辑: 对不起,我使用了错误的init方法,即你正在寻找的方法,initWithTimeInterval:sinceDate:。您创建一个新的NSDate,可以增加或减少时区前进/后退的秒数。