NSDateFormatter dateFormat ShortStyle不起作用

时间:2015-05-07 01:39:24

标签: ios iphone swift xcode6 nsdateformatter

我现在遇到NSDateFormatter的问题。

当我将dateStyle设置为ShortStyle时,如果我将模拟器的语言设置为简体中文,代码将起作用。如果我将日期设置为2015-04-20,则会显示15/4/20。根据{{​​3}},这个结果是正确的。由于我设置了dateFormatter的区域设置,因此日期将以year/month/date格式显示,符合中文的日期写作习惯。

  

ShortStyle

     

指定短样式,通常仅限数字,例如“11/23/37”   或“下午3:30”。

如果我将模拟器的语言设置为日语,相同的代码将导致2015/04/20的结果。这与文档的描述不同,但无论如何它仍然有效。

但是,如果我将模拟器的语言设置为英语,相同的代码将导致错误。代码显示如下,错误显示"fatal error: unexpectedly found nil while unwrapping an Optional value"。它指向let tmpStartDate: NSDate = dateFormatter.dateFromString(self.room!.startdate)!

的行
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let currentTimeZone: NSTimeZone = NSTimeZone.localTimeZone()
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.timeZone = currentTimeZone
let locale = NSLocale.currentLocale()
dateFormatter.locale = locale
let tmpStartDate: NSDate = dateFormatter.dateFromString(self.room!.startdate)!
let start: String = dateFormatter.stringFromDate(tmpStartDate)

但这很奇怪。如果模拟器的语言是简体中文或日语(尽管有点不同),则会运行相同的代码和相同的日期。但这会导致英语上的致命错误。

我不得不说self.room.startdate不是零。它是从服务器获得的,在任何情况下都不会是零。我甚至可以打印出来。

此外,在另一个视图中使用ShortStyle的类似代码可以正常工作。我不知道为什么会这样。

有谁知道为什么会出现这个问题?如果我真的想使用NSDateFormatterStyle.ShortStyle而不是直接将dateFormat设置为'yy/MM/dd',如何解决?

1 个答案:

答案 0 :(得分:0)

我的朋友查看了代码并指出了问题。

此问题是由中/日文和英文日期格式的差异引起的。在中文/日文中,日期格式为year/month/date。但在英语中,日期格式为month/date/year

在我的代码中,我在从字符串传输日期之前将dateStyle设置为ShortStyle。它将正常工作,因为开始日期字符串也是year-month-date格式。但在英语中,ShortStylemonth/date/year。但是开始日期字符串的日期格式仍为year-month-date。这将导致无法从字符串传输日期,并导致应用程序崩溃。

要解决此问题,只需在dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle行之后移动let tmpStartDate: NSDate = dateFormatter.dateFromString(self.room!.startdate)!行即可。

然后代码将正常工作,并显示不同区域的不同日期格式。 (Year/month/date表示中文/日文,month/date/year表示英文。)

特别感谢我的朋友SorziaX,尽管他没有stackoverflow帐户。