【问题标题】:NSDate from NSString adjusted to device timzone来自 NSString 的 NSDate 调整为设备时区
【发布时间】:2026-01-17 07:55:02
【问题描述】:

我有一个这样的NSString

 NSString *playTime = @"20:45";// GMT

我需要将此字符串转换为NSDate(仅小时和秒),然后调整为设备时区。

例子:

如果用户设备时区设置为 GMT,我需要这样的结果:@"20:45";

如果用户设备时区设置为 GMT + 2,我需要这样的结果:@"22:45";

【问题讨论】:

标签: iphone ios objective-c nsdate


【解决方案1】:

根据您的要求使用此代码进行日期转换。

   NSDateFormatter *dateFormat = [NSDateFormatter new];
   [dateFormat setDateFormat:@"HH:mm"];
    [dateFormat setTimeZone:[NSTimeZone localTimeZone]];
    logDate = [dateFormat dateFromString:@"20:45"];
     NSLog(@"Date %@",[dateFormat stringFromDate:logDate]);

【讨论】:

    【解决方案2】:

    下面的代码将计算时间 w.r.t.当地时区。
    假设我的时区是 GMT+05:30,那么时间 05:30 将变为 00:00

    NSString *playTime = @"20:45";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"HH:mm";
    NSDate *date = [formatter dateFromString:playTime];
    NSLog(@"%@",date);
    

    日志是: 2000-01-01 15:15:00 +0000

    【讨论】:

      【解决方案3】:

      试试这个

      NSString *gmtDateString = @"20:45";
      
      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
      [dateFormatter setDateFormat:@"HH:mm"];
      
      //Now you have date in GMT time zone by default dateFormatter timezone would be in local time zone
      NSDate *date = [dateFormatter dateFromString:dateString];
      
      //set to local time zone
      [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
      
      //Now you have string in localDate format
      NSString *localDateString = [dateFormatter stringFromDate:date];
      

      【讨论】: