2014-10-29 86 views
-1

该代码完全适用于我的模拟器,但现在面临的问题时,我的设备上运行,并更改时区以IST(印度标准时间)NSDateFormatter给了我错误的日期,当我选择IST从手机设置

运行的代码:

var zones = ["Asia/Calcutta","Asia/Hong_Kong"] 
    for eachtimeZone in zones{ 
    println(eachtimeZone) 
    var nTZ:NSTimeZone = NSTimeZone(name: eachtimeZone)! 

    var dateFormatter: NSDateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "hh:mm a" 
    dateFormatter.timeZone = NSTimeZone(abbreviation: nTZ.abbreviation!) 

    println(dateFormatter.stringFromDate(NSDate())) 
    println(NSDate()) 

    } 

输出时,我使用模拟器:

Asia/Calcutta 
06:11 AM 
2014-10-29 00:41:36 +0000 
Asia/Hong_Kong 
08:41 AM 
2014-10-29 00:41:36 +0000 

输出当我手动设定的时间来IST

Asia/Calcutta 
06:11 AM 
2014-10-29 00:41:36 +0000 
Asia/Hong_Kong 
06:11 AM 
2014-10-29 00:41:36 +0000 

不工作的手机时设定: enter image description here

什么是错误的代码?

使用的Xcode 6/iOS8上/ iPhone 5S

NB:加尔各答=加尔各答。一样的地方。

Update1: 

Scenerio:通过设置将设备时间设置为印度标准时间(IST)。 然后我试着执行上述打印香港标准时间(HKT)和IST的代码。 由代码显示的HKT是错误的。

+0

在上述测试中解释您的各种情况几乎是不可能的。 – 2014-10-29 01:14:20

+0

这就是我的View Controller中唯一运行的代码。如果你只是把这段代码放在ViewDidLoad中,它就可以工作。我提供了配置和代码截图。请在提出有效问题之前向我询问详细信息。 – 2014-10-29 01:28:49

+0

我们无法从您的描述中了解哪种情况在设备上运行,哪些情况在模拟器上运行,也无法告诉您设备是如何设置的。我们无法确定哪些时区“被占用”了,只有某些时区名称被iOS识别。在创建时区对象后,您应该记录时区对象的'secondsFromGMT'值。并确保您只使用来自'knownTimeZoneNames'的时区名称。 – 2014-10-29 01:37:36

回答

0

因此找出了问题所在。 亚洲/ Hong_Kong从未在NSTimeZone下有过缩写,因此它将成为Null。因为它是空的代码用于从设备采取默认时间。有趣的是,代码没有抛出错误。 更改代码已经工作。

dateFormatter.timeZone = NSTimeZone(name: eachZone)! 
+0

或多或少我说的。 – 2014-10-29 02:59:12

+0

不是。 Apple提供的已知时区名称中包含“Asia/Hong_Kong”。即使那样它也没有缩写。为了使事情更简单,我已经从knownTimeZoneNames中提取了这两个名字 – 2014-10-29 03:03:01

+0

在哪个平台上?那里的模拟器和设备不一定是一样的。 – 2014-10-29 03:05:57

相关问题