2015-05-01 45 views
1

我想使用dateFormatter从字符串转换。它可以在模拟器上正常工作,并可在设置为12小时的时间内在手机上正常工作,但无法在手机设置为24小时时设置。 (当模拟器设置为24小时时它会设置)。dateFromString无法将Iphone设置为24小时快速转换

passedTime = "10:36 pm" 
var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "h:mm a" 
let pickerDate = dateFormatter.dateFromString(passedTime) 
println(pickerDate) 

就像我说的,当在模拟器或我于12小时电话上运行,它可以完美运行,但是当手机SETT24小时,它打印零。我已经阅读了一些有关语言环境设置的内容,但是当我在手机上运行该语言时,无论我处于12小时还是24小时模式,本地都是一样的。

+0

你是如何从手机中获得时间的?我通常只是创建一个新的NSDate对象来获取当前的时间和日期。 – Garret

+2

您需要设置区域设置。请参阅http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformatter-locale-feature –

+0

@HotLicks可能最好对您决定的答案发表评论反对票。 –

回答

0

一定要检查12小时/ 24小时,并相应地设置格式化程序,使用“H”24小时,“h”12小时。

enter image description here

表从a blog post on Waracle.com,在那里你可以找到完整的清单中获取。

+1

@MartijnPieters对不起,但你挑剔。任何人都清楚这是一个引用,将图片加入blockquote并不是真正有意义的,并且给出了适当的链接。举一个例子,只是一个例子,你不必“遵循”,这不是一条规则,它只是说“这就是你如何做到这一点”。并且请不要再重复发布同一个链接,这里的每个人都已经在你的第一个评论之后看到了它,我们并不是很慢。如果你手上有太多时间,那么回过头来修正所有引用,对我来说,答案就是这样。 – Mecki

+0

@Mecki政策是使用blockquote。这现在变成无用的噪音。如果你想讨论政策,你可以在[Meta]上发帖。 –

0

如何使用两个日期格式化程序来解析?

var time12hrFormatter = NSDateFormatter() 
time12hrFormatter.dateFormat = "h:mm a" 
var time24hrFormatter = NSDateFormatter() 
time24hrFormatter.dateFormat = "HH:mm" 

if let pickerDate = time12hrFormatter.dateFromString(passedTime) { 
    println(pickerDate) 
} else if let pickerDate = time24hrFormatter.dateFromString(passedTime) { 
    println(pickerDate) 
} else { 
    println("failed to parse '\(passedTime)'") 
} 
+0

我试过这样的东西,它仍然失败(在手机上,而不是模拟器)。该字符串在h:mm格式中显式格式化,所以试图在HH:mm中解析它不起作用。我无法解释的是,为什么h:mm a仅在手机处于12小时格式时才起作用。 –

+0

在这种情况下,我认为@HotLicks已经提供了上面的答案:将日期格式化程序的本地设置为中性。 – skim

2

我有完全相同的问题......非常令人沮丧。解决方案是设置日历的区域设置。对于Swift 3,它是:yourDateFormatter.locale = Locale(identifier: "en-US")

相关问题