【发布时间】:2016-04-25 14:49:33
【问题描述】:
我在某个特定应用中遇到了日期/时间问题。这是一个活动预订应用程序,我什至不想知道有时区之类的东西。无论用户当前位于何处,我都想要一次且只有一次。我不希望将时间转换为任何其他语言环境/时区。此应用程序中没有“本地”时间之类的东西,因为一切都基于您预订活动地点的时间。它需要始终在那个时间表达,而不是你现在所处的时间。因此,我真的不需要任何时区功能。
例如,您在纽约,并在 3 月 15 日晚上 10:30 在伦敦预订了活动/约会。现在,无论您是在纽约、伦敦还是世界上任何其他城市,那个事件仍然在 3 月 15 日晚上 10 点 30 分在伦敦举行。如果您正在洛斯卡沃斯度假,您不想知道您的活动是在洛斯卡沃斯时间下午 3:30。
在有人向我解释 NSDate 不包含时区数据之前,我已经完全意识到了这一点,而且这些信息对我来说毫无用处。 NSDate 可能没有时区信息,但日期会被转换数千次,每次转换都会考虑时区,这让我非常痛苦。我在 NSDate 上有大约 30 个扩展,试图确保它永远不会返回本地时间(尝试将所有内容保持在 UTC)。以为我已经成功了,但显然 DatePicker 有它自己的日期格式化程序,所以现在所有的日期选择器都搞砸了。
必须有一种相对简单的方式来处理这个问题。我尝试将所有内容都处理为 UTC 日期,从远程数据库到 Web 服务再到 iOS 应用程序中的所有内容,确保所有转换为/从字符串等转换为 UTC 格式。仍然没有太多的运气。我可以在几分钟内制作出精美的动画,但我已经与这些愚蠢的日期作斗争了好几个星期。
解决这个问题的最佳方法是什么?
- 一个时区中的所有内容(例如 UTC)
- 强制应用本地时区对所有人都相同?
- 在事件地点的时区存储时间,然后总是尝试根据该时区显示它?这听起来很复杂,但我担心这是我应该采取的方向,即使它有点矫枉过正。
- 每次触摸日期时创建日期格式化程序并重置区域设置?
- 其他?
【问题讨论】:
-
看起来你只需要时区:-)
-
你的问题正是你想要做的。忘记时区。如果您需要特定位置的日期,则只需在从字符串中提取日期时将该时区传递给日期格式化程序
-
那么,日期选择器之类的东西呢?他们会自动将时间转换为您当前的时区。不涉及字符串或手动转换。我给它一个 NSDate 并且它总是显示错误的时间(我的时区的时间,而不是事件的时区)。
-
我在日期选择器中更改了语言环境,但我仍然总是得到当地时间。
标签: ios swift datepicker timezone nsdateformatter