【问题标题】:Convert string date of PST format NSDate转换 PST 格式 NSDate 的字符串日期
【发布时间】:2016-04-13 14:25:12
【问题描述】:

我想在目标 C 中将 @"2016-04-15T15:00:00-07:00" 转换为 NSDate。我正在使用 NSdateFormatter @"yyyy-MM-dd'T'HH:mm:ssZZZZZ" 但没有得到 NSDate

我必须将字符串日期从服务器设置为 PST 时间 NSDate

代码:

NSString *strDate = @"2016-04-15T22:00:00Z";

NSDate* ts_utc;

NSDateFormatter* df_utc = [[NSDateFormatter alloc] init];
[df_utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df_utc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

ts_utc = [df_utc dateFromString:strDate];



NSDateFormatter* df_local = [[NSDateFormatter alloc] init];
[df_local setTimeZone:[NSTimeZone timeZoneWithName:@"PST"]];
[df_local setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

NSString* ts_local_string = [df_local stringFromDate:ts_utc];


NSDate *date = [df_local dateFromString:ts_local_string];

请提出建议。

【问题讨论】:

  • @trojanfoe - 代码更新
  • 确保您的语言环境设置为英语,否则您将遇到非英语语言环境下的时区名称问题。 UTCPST 都不是标准化名称。
  • 我已经测试了你的代码,它对我来说可以正常工作,所以我很确定问题出在你的期望中,而不是在你的代码中。请注意,NSDate 是一个独立于时区的时间实例。只有日期的字符串表示取决于时区。
  • 您的问题和代码不匹配。您说您要解析格式为@"2016-04-15T15:00:00-07:00" 的日期字符串,但您发布的代码显示格式为@"2016-04-15T22:00:00Z" 的日期字符串。这些不是相同的格式。时区格式完全不同。

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

编辑

我和你有同样的问题,我就是这样解决的

NSString *strDate = @"2016-04-15T22:00:00Z";
NSDate* ts_utc;
NSDateFormatter* df_utc = [[NSDateFormatter alloc] init];
[df_utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df_utc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
ts_utc = [df_utc dateFromString:strDate];

NSTimeZone *destinationTimeZone = [NSTimeZone timeZoneWithName:@"PST"];
NSInteger timeZoneHourOffset = (NSInteger) ([destinationTimeZone secondsFromGMTForDate:ts_utc] / 3600.0); //geting the time offset between UTC and PST
NSDate *pstDate = [ts_utc dateByAddingTimeInterval:timeZoneHourOffset * 60 * 60]; //applying that offset into ts_utc NSDate

希望,这对你有帮助!

【讨论】:

  • 不应该是'Z'(即引用)吗?
  • 我想要 PST 时区的日期。不是 UTC
  • @NiKKi 是的,但是您在日期字符串的末尾有一个文字 Z,这表明它是“zulu”(UTC)。如何在内部将其转换为 PST 与从字符串到 NSDate 的解析无关。
  • @trojanfoe 在我上面的代码中,在NSString* ts_local_string = [df_local stringFromDate:ts_utc]; 行,我得到了PST 中的字符串日期,即​​@"2016-04-15T15:00:00-07:00"。这不会在 PST NSDate 格式中受到影响
  • 2016-04-15T22:00:00Z 的 PST 时区格式的结果应该如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2015-12-17
  • 2013-12-28
  • 2014-09-06
相关资源
最近更新 更多