ios - Playground 上的 NSFormatter 与项目中的工作方式不同

标签 ios swift datetime timezone nsdateformatter

我在日期格式方面遇到了真正的困难。我想完全忽略时区,因为所有时间都被认为是本地时间。我在 Playground 上试过了,效果很好。

var dateFormatter: NSDateFormatter = NSDateFormatter()
var dateString = "2015-09-02 22:05:00"

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
//dateFormatter.timeZone = NSTimeZone.localTimeZone()

let openDate = dateFormatter.dateFromString(dateString)

上面的代码创建了一个日期值“Sep 2, 2015, 10:05 PM”,这正是我想要的。但是,当我将相同的代码复制并粘贴到一个简单的项目中时,返回的值总是“2015-09-03 04:05:00 +0000”,这正是我不想要的。我希望无论我现在身在何处,日期始终与保存时区相同。

有什么方法可以让它完全忽略时区?我想在本地保存一个日期并在本地检索它,但它一直在改变我的时间。在日期格式化程序中设置时区没有区别。为什么它在 Playground 上有效但在项目中无效?谢谢。

最佳答案

您可以忽略时区,将您的日期视为 UTC 时间,如下所示:

let dateFormatter: NSDateFormatter = NSDateFormatter()
let dateString = "2015-09-02 22:05:00"

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)!
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let dateFromString = dateFormatter.dateFromString(dateString){
    println(dateFromString)  // "2015-09-02 22:05:00 +0000"
    let stringFromDate = dateFormatter.stringFromDate(dateFromString)
    println(stringFromDate)   // "2015-09-02 22:05:00"
}

关于ios - Playground 上的 NSFormatter 与项目中的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364998/

相关文章:

jQuery 单击事件未触发 - ios 主屏幕 Web 应用程序

ios - 添加可本地化字符串文件时出错

swift - 以编程方式添加 AdMob 横幅

javascript - 如何在 html5 日期时间选择器中将格式从 12 小时更改为 24 小时?

ruby-on-rails - end_of_week 返回不同日期

ios - 警告 : CLSLog has been used before (or concurrently with) Crashlytics initialization and cannot be recorded

ios - animateWithDuration 基于完全不相关的代码行执行动画

iOS - 创建自定义推送转场动画

ios - 有没有办法通过 Objective-C 应用程序访问 iOS 设备上的通话记录数据和短信日志数据?

c# - 如何减去 DateTime 字段和 Duration?