我从我的MySQL数据库中检索到的NSString(日期)是GMT +000(伦敦),其格式如下:12/05/2011 5:21:29 PM。
我想知道如何将其转换为用户的时区,以便如果用户在中国,那么它将是中国时区的日期。
答案 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,可以增加或减少时区前进/后退的秒数。