【问题标题】:swift nsdate give wrong output [duplicate]swift nsdate给出错误的输出[重复]
【发布时间】:2016-12-29 23:56:58
【问题描述】:

一个简单的代码,用于将字符串日期转换为 NSDate。但不知道为什么它返回实际日期 - 1

var start_date: NSDate?
var end_date: NSDate?

let dateformatter = NSDateFormatter()
dateformatter.dateFormat = "yyyy-MM-dd"

start_date = dateformatter.dateFromString("2016-09-01")!
end_date = dateformatter.dateFromString("2016-09-07")!

print(start_date)
print(end_date)

输出

2016-08-31 18:30:00 +0000
2016-09-06 18:30:00 +0000

【问题讨论】:

    标签: ios swift nsdate nsdateformatter


    【解决方案1】:

    您需要将dateformat 中的时区设置为 UTC

        let dateformatter = NSDateFormatter()
        dateformatter.dateFormat = "yyyy-MM-dd"
        dateformatter.timeZone = NSTimeZone(name: "UTC")
    
        start_date = dateformatter.dateFromString("2016-09-01")!
        end_date = dateformatter.dateFromString("2016-09-07")!
    

    这解决了我的问题。

    【讨论】:

    • 我发现你和 Sweeper 的回答都很有用,现在给我正确的输出。那么 NSDateFormatter() 的默认 TimeZone swift 分配是什么。
    • 我认为这是您的本地时区@ManishJain
    • 这会产生新的问题。 NSDate 以 UTC 格式存储,而 nsdateformatter 将当前时区考虑在内。使用此代码,您可以将日期更改为 5:30 小时。
    【解决方案2】:

    我以前也遇到过类似的问题。我认为这与您的时区有关。经过一番尝试,我做到了,它以某种方式工作......

    let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: yourDate)
    components.timeZone = NSTimeZone(name: "GMT")
    let correctDate = NSCalendar.currentCalendar().dateFromComponents(components)!
    

    基本上,将时区切换到 GMT...

    我建议你创建一个扩展:

    extension NSDate {
        func switchToCorrectTimeZone() -> NSDate {
            let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: self)
            components.timeZone = NSTimeZone(name: "GMT")
            return NSCalendar.currentCalendar().dateFromComponents(components)!
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 2013-08-17
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多