从字符串日期转换时区

时间:2010-05-17 06:43:11

标签: cocoa

我有一个stringdate 16-MAY-2010 23:04:44我需要转换为gmt时区,这是需要的输出是17-May-2010 12:03:03。

我使用日期格式化程序进行转换,但我得到的结果不是我要求的格式。我发送的代码请告诉我,如果我做得对不对

以下是代码:

NSString *timeStamp = [format stringFromDate:[NSDate date]];
NSString *output = [timeConv dateStringFromString:timeStamp];

- (NSString *)dateStringFromString:(NSString *)sourceString
{     
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
    [dateFormatter setDateFormat:@"dd-MMMM-yyyy HH:MM:ss"];
    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:gmt];
    NSDate *date = [dateFormatter dateFromString:sourceString];

    return [dateFormatter stringFromDate:date];
} 

我得到的输出是没有转换的旧时间。所以请让我知道正确的解决方案。

2 个答案:

答案 0 :(得分:1)

我不知道任何可可,但如果我正确理解你的代码,你永远不会告诉解析器你的原始字符串不是GMT,而是GMT-1。

根据您自己的代码(再次,不知道可可),我认为您需要这样做:

NSTimeZone *gmtminusone = [NSTimeZone timeZoneForSecondsFromGMT:-3600.0];
[dateFormatter setTimeZone:gmtminusone];
NSDate *date = [dateFormatter dateFromString:sourceString];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
return [dateFormatter stringFromDate:date];

如果它不能立即起作用,也许它会让你知道该怎么做:

  1. 解析日期格式化程序设置为GMT-1的字符串,以输出日期。
  2. 使用日期格式器设置为GMT解析日期,以输出字符串。

答案 1 :(得分:1)

日期字符串不包含时区规范,因此日期格式化程序依赖于您告诉它它所在的时区。

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSDate *date = [dateFormatter dateFromString:sourceString];

你告诉它输入字符串是GMT。

您需要告诉日期格式化程序日期所在的时区。完成后,您可以告诉格式化程序将字符串转换为日期(dateFromString:),它将解释string表示该时区的日期。

然后,一旦你有了如此解释的日期,将格式化程序的时区切换为GMT并让它输出字符串(stringFromDate:)。该字符串将表示转换为GMT的日期。