ios - iOS:如何检查选择的日期时间是否是夏令时的有效时间?
问题描述
我有一个特殊情况来检查用户在哪里输入未来的日期和时间,我需要验证该时间是否有效(我的意思是什么,下面解释了有效),考虑到用户可能会受到他所在时区的夏令时的影响。
例如:
- 假设用户的时区是澳大利亚的阿德莱德。打开链接以查看时区如何影响阿德莱德或见下文。
4 Oct 2020 - Daylight Saving Time Starts
When local standard time is about to reach
Sunday, 4 October 2020, 2:00:00 am clocks are turned forward 1 hour to
Sunday, 4 October 2020, 3:00:00 am local daylight time instead.
- 现在基于上述信息,我的理解是我的用户是否选择了日期时间
2020 年 10 月 4 日,凌晨 2:01:00 - 2020 年 10 月 4 日,凌晨 2:59:00
它是无效的,因为时间被转发到凌晨 3 点。
如何在 iOS 应用程序中验证这一点?(假设我)
基本上我需要通知用户选择的时间受 DST 影响,用户需要选择不同的时间。
我查看了日期和时区 API,似乎找不到任何可以验证这一点的东西。
在此先感谢,任何帮助将不胜感激。
解决方案
我想最简单的方法是将字符串(或用户输入的任何内容,似乎您没有使用UIDatePicker
)转换为日期并检查是否可行。
对于中欧,夏令时从 2020 年 3 月 29 日开始,所以
let df = DateFormatter()
df.locale = Locale(identifier: "de_DE")
df.timeZone = TimeZone(identifier:"Europe/Berlin")
df.dateFormat="yyyy-MM-dd hh:mm"
if let theDate = df.date(from: "2020-03-29 02:01")
{
print(theDate)
} else {
print ("Illegal date")
}
将打印非法日期。更棘手的是切换回非 DST,因为(在欧洲中部)有两个可能的日期- 它可能意味着具有两种不同 UTC 表示的2020-10-25 02:01
冬季或夏季时间。
推荐阅读
- python - 如何解决“ImportError:没有名为 marionette_test 的模块”
- asp.net-mvc - asp.net mvc5中使用CKEditor上传图片
- react-native - `找不到模块'../scripts/ios'`复制项目目录后尝试运行iOS模拟器
- python - 如何在我的 django 应用程序中模拟一个访问外部服务的组件?
- sql - SQL - 复杂存储过程需要在计数后将“case when”的值从整数更改为 VarChar
- javascript - 如何正确使用 React 路由器重定向?
- c++ - 包含字符串的结构的Boost Interprocess向量是否需要特殊的分配器?
- qt - 让 QScrollArea 立即调整其子小部件的大小
- java - Android Studio 选项消失了
- sml - 为什么我使用 `let` 而不仅仅是 `val` 在 SML 中的函数内声明变量?