首页 > 解决方案 > iOS:如何检查选择的日期时间是否是夏令时的有效时间?

问题描述

我有一个特殊情况来检查用户在哪里输入未来的日期和时间,我需要验证该时间是否有效(我的意思是什么,下面解释了有效),考虑到用户可能会受到他所在时区的夏令时的影响。

例如:

  1. 假设用户的时区是澳大利亚的阿德莱德。打开链接以查看时区如何影响阿德莱德或见下文。
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. 
  1. 现在基于上述信息,我的理解是我的用户是否选择了日期时间

2020 年 10 月 4 日,凌晨 2:01:00 - 2020 年 10 月 4 日,凌晨 2:59:00

它是无效的,因为时间被转发到凌晨 3 点。

如何在 iOS 应用程序中验证这一点?(假设我)

基本上我需要通知用户选择的时间受 DST 影响,用户需要选择不同的时间。

我查看了日期和时区 API,似乎找不到任何可以验证这一点的东西。

在此先感谢,任何帮助将不胜感激。

标签: iosswiftdatetimezonedst

解决方案


我想最简单的方法是将字符串(或用户输入的任何内容,似乎您没有使用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冬季或夏季时间。


推荐阅读