我现在遇到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'
,如何解决?
答案 0 :(得分:0)
我的朋友查看了代码并指出了问题。
此问题是由中/日文和英文日期格式的差异引起的。在中文/日文中,日期格式为year/month/date
。但在英语中,日期格式为month/date/year
。
在我的代码中,我在从字符串传输日期之前将dateStyle
设置为ShortStyle
。它将正常工作,因为开始日期字符串也是year-month-date
格式。但在英语中,ShortStyle
为month/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帐户。