【发布时间】:2018-04-27 16:09:56
【问题描述】:
我一直在寻找这个,但找不到与我的需求正确对应的解决方案。我需要获取 NSDate 类型的 Date,而不是 String,其中包含特定时区的当前时间,以便稍后进行比较以查看时间是否在范围之间。
例如,我需要查看商店是否营业。我在 EST 时区,现在是晚上 11:30,所以我看到了一家在 11 点关门但商店在 PST 的商店的时间表,这意味着现在该时区是晚上 10 点并且仍然营业。所以我需要将我的时区更改为商店时区,以显示一个标志,如果它现在是打开还是关闭。
这是我尝试过的一个例子:
guard let tz = model?.timeZone else {return "EST"};
let tz = TimeZone.init(abbreviation: timeZone);
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ";
let dateString = df.string(from:Date()); //time is correct
let date = df.date(from: dateString); //ignore timeZone and transform to a different date.
但是当我转换包含正确设置时区的时间的字符串并将其解析回日期类型时,它只是忽略时区并显示不同的时间。 我想我将不得不做一些事情,比如获取时间之间的差异并添加到当前时间,但我不确定如何完成。因为这也是我一直在尝试做的事情:
let localTimeZoneOffset = myTimeZone.secondsFromGMT(for: Date());
let currentTime = Date().addingTimeInterval(TimeInterval(-
localTimeZoneOffset));
我仍然可以在任何区域,并且我想查看另一个区域的商店是否在不同的时区营业,即设备的当前时间和商店的开闭时间。我的位置可以在任何地方,我也可以选择商店,所以我想我需要获得两次的差异或类似的东西
假设这是我得到的信息:Now = Date();开放时间 = 2018-04-27 11:00:00 +0000;关闭时间 = 2018-04-28 03:00:00 +0000; StoreTimeZone = "EST" 如果我在与商店不同时区的地方,是否可以轻松获取商店是否营业?我已经有了比较功能,时间是在 OpenTime 和 CloseTime 之间,我只需要在商店中传递正确的时间来获取它现在是否打开。
提前致谢。
【问题讨论】:
-
仅供参考 - 避免使用时区缩写。并非所有都是独一无二的(示例包括 IST 和 CST)。
-
@rmaddy 是的,但这就是它来自 API 的方式,我无法更改,但感谢您的建议
-
日期没有时区。您无法获得包含时区信息的
Date,因为Date不依赖或不包含时区。 -
@TomHarrington 在这种情况下,我需要添加该时区的时间差以获得相似的时间,对吧?如何找到我通过的时区的 currentDate UTC 和 currentDate 之间的差异并将其添加到 currentDate?
-
听起来您需要将 api 中的字符串转换为
Date,然后您可以只比较它而不是尝试比较字符串。