【问题标题】:Converting string to date looses an hour将字符串转换为日期会浪费一个小时
【发布时间】:2012-03-28 10:57:41
【问题描述】:

我正在尝试将字符串格式的日期转换为 NSDate,但结果似乎从传入的时间中减去了一个小时。有什么想法吗?

-(NSDate *) convertStringToDate:(NSString *)theString {

    //init formatter
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 

    //setup the formatter
    [dateFormat setDateFormat:@"dd-MM-yyyy HH:mm"];
    [dateFormat setTimeZone:[NSTimeZone localTimeZone]];  

    //cast the date from the string
    NSDate *date = [dateFormat dateFromString:theString];


    [dateFormat release];

    return date;    
}

这是测试调用:

NSDate *testDate = [self convertStringToDate:@"28-03-2012 11:46"];    
NSLog(@"converted test date - %@", testDate);

我得到输出(比我指定为参数的时间早一个小时):

converted test date - 2012-03-28 10:46:00 +0000

任何帮助我如何更改时区将不胜感激。

【问题讨论】:

    标签: objective-c timezone nsdate


    【解决方案1】:

    当您 NSLogNSDate 时,它不会显示在您当地的时区。它以格林威治标准时间显示。您当地的时区目前比格林威治标准时间早 1 小时(可能是因为夏令时)。

    要将日期转换为相对于您当地时区的字符串,您需要使用日期格式化程序(日期格式化程序的时区将默认设置为您当地的时区):

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";
    NSLog(@"converted test date - %@", [dateFormatter stringFromDate:testDate]);
    

    【讨论】:

      【解决方案2】:

      由于您所在的时区,您看到的时间减少了一小时,您需要在获得日期时更改它。

          DateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
          dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";
      
          NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
          [dateFormatter setTimeZone:gmt];
          NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
          [dateFormatter release];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-09
        • 2015-04-27
        • 2017-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多