【问题标题】:Formatting NSDates in the same timezone, regardless of the system timezone无论系统时区如何,在同一时区格式化 NSDates
【发布时间】:2013-10-14 00:25:42
【问题描述】:

我正在从远程源导入一些参考日期。日期表示一年中任意一天的时间(在本例中为 01/01/2000)。它们以 Unix 时间戳的形式提供。例如 946717200 代表上午 9 点。我还得到了每个位置的时区。

我正在使用以下代码将这些时间转换为与 UTC 有正确偏移的实际日期。

-(NSDate *)dateWithInterval:(NSTimeInterval)interval referenceDate:(NSDate *)aRealDate timezone:(NSTimeZone *)aTimeZone
{
  NSDate *time = [NSDate dateWithTimeIntervalSince1970:interval];
  NSDateComponents *components = [[NSDateComponents alloc] init];

  //Set the timezone
  [components setTimeZone:aTimeZone];

  //I'm using Erica Sadun's NSDate+utilities category on NSDate to provide the shorthand methods
  [components setDay:[aRealDate day]];
  [components setMonth:[aRealDate month]];
  [components setYear:[aRealDate year]];
  [components setHour:[time hour]];
  [components setMinute:[time minute]];
  [components setSecond:[time seconds]];

  return [[NSCalendar currentCalendar] dateFromComponents:components];
}

例如,给定输入 946717200、当前日期和 America/Los_Angeles 时区,我得到一个日期 2013-10-07 16:00:00 +0000,但是当我使用 NSDateFormatter 对其进行格式化,时区设置为 America/Los_Angeles,系统设置为相同的时区,显示为 2013-10-07T01:00:00-0700

我做错了什么?

【问题讨论】:

  • 你的问题是出现在这个日期的“T”对吗?
  • 不,问题是实际日期不正确,格式没有问题。

标签: cocoa nsdate nsdateformatter nsdatecomponents nstimezone


【解决方案1】:

问题是 NSDate-utilities 类别。它完全忽略了日期的时区修饰符,并始终在考虑时区的情况下创建它。通过使用我自己的一组日期组件并设置时区属性,问题就消失了。

【讨论】:

    猜你喜欢
    • 2018-05-21
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2011-12-14
    • 2014-09-01
    • 2019-06-14
    • 2016-06-11
    相关资源
    最近更新 更多