【问题标题】:Swift: Get correct time zone from Date Picker?斯威夫特:从日期选择器获取正确的时区?
【发布时间】:2016-02-11 20:44:57
【问题描述】:

我正在尝试使用时间格式化程序从日期选择器中快速获取正确的时区,但它不起作用。我得到的是 UTC,而不是 EST。

1) 如果我打印 dateFormatter.stringFromDate(datePicker) 我会得到 EST,但是

2) 我不需要字符串,我需要 EST 中的 NSDate 所以

3) 我可以使用它来获取 EST 中的 timeIntervalSinceDate(NSDate)。

如下所示,我试图将它从字符串中取回 NSDate 的技巧没有奏效。它仍然是UTC,并且自日期以来的时间间隔不正确。

dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.timeZone = NSTimeZone.localTimeZone()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date: NSDate = dateFormatter.dateFromString(dateFormatter.stringFromDate(datePicker))!
print(date)
print(date.timeIntervalSinceDate(datePicker))

【问题讨论】:

    标签: swift datepicker nsdate nsdateformatter


    【解决方案1】:

    那些试图找到解决方案但无法解决确切问题的人。这是我尝试过的东西: 使用time.addTimeInterval(-14400) 函数,其中-14400 是4 小时的差异。因此,如果您希望 UTC 到 EST 执行此操作。 像这样的东西:-

    var time = Date() // assuming you have this in UTC
    time.addTimeInterval(-14400)
    

    您还可以使用addingTimeInterval 函数返回新日期。 我知道这有点不稳定,因为我们手动执行此操作,但希望它对某人有所帮助。

    【讨论】:

      【解决方案2】:

      上面的答案是完全错误的。日期选择器随时报告系统语言环境中的日期,因此,如果 datePicker 显示 08:00 时间并且您是 GMT+2,则选择器的属性日期将为 06:00。

      因此,要获得 datePicker 的绝对值,您必须将视图中的 UTC 时区传递给他:

      datePicker.timeZone = TimeZone.init(identifier: "UTC")
      

      现在,选择器的日期属性将是预期和选择的。

      【讨论】:

      • 以上答案是 5 年前的,毫无疑问,自从那个更早的 swift 版本以来,一切都发生了变化。
      【解决方案3】:

      要将 DatePicker 的 TimeZone 设置为 UTC,请使用:

      datePicker.timeZone = TimeZone.init(identifier: "UTC")
      

      注意“timeZone”的驼峰表示法。 不幸的是,我没有足够的信用来评论上一篇文章,它几乎是正确的,所以我不得不创建一个新的答案。

      小知识:TimeZone 自 iOS 2.0 以来就已经存在,如下所述: https://developer.apple.com/documentation/uikit/uidatepicker/1615976-timezone

      【讨论】:

        【解决方案4】:

        您不能从日期选择器中“获取时区”。你可以约会。日期将独立于设备的当前时区。

        也许您认为您有不同的日期,但实际上,没有“UTC 日期”或“EST 日期”之类的东西。相反,只有一个日期,您可以使用日期格式化程序为不同的时区显示它们。

        请注意,您的代码中存在相当多的冗余。日期格式化程序的默认语言环境和时区已与您设置的值相同。此外,当您有一个返回 NSDate 的方法时,您没有使用 : NSDate 注释常量,这会使您的代码更加冗长和混乱。

        请注意,如果您print 日期,控制台将始终显示 UTC。例如

        let date = NSDate() // Nov 10, 9:44 PM
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "YYYY-MM-dd hh:mm a"
        let dateString = dateFormatter.stringFromDate(date) // "2015-11-10 09:44 PM"
        print(date) // "2015-11-10 20:44:54 +0000\n"
        

        【讨论】:

        • 为什么我从那个日期开始得到奇怪的时间间隔? -0.5 秒。
        • 您没有提供有关您的时间间隔的任何详细信息。 - 另外,请注意您在 datePicker 上调用时间间隔方法,而不是日期。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 2017-07-22
        • 2017-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        相关资源
        最近更新 更多