NSDateFormatter dateFormat ShortStyle 不工作
NSDateFormatter dateFormat ShortStyle not working
我现在的 NSDateFormatter 有一些问题。
当我将dateStyle设置为ShortStyle
时,如果我将模拟器的语言设置为简体中文,代码就可以运行。如果我将日期设置为 2015-04-20
,它将显示 15/4/20
。根据documentation,这个结果是正确的。而且由于我设置了dateFormatter
的locale,所以日期会显示成year/month/date
的格式,符合中国人的日期书写习惯。
ShortStyle
Specifies a short style, typically numeric only, such as “11/23/37”
or “3:30 PM”.
如果我把模拟器的语言设置成日文,同样的代码会导致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'
,该如何解决?
朋友看了代码指出了问题
这个问题是由于Chinese/Japanese和英文的日期格式不同造成的。在 Chinese/Japanese 中,日期格式为 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
表示 Chinese/Japanese,month/date/year
表示英语。)
特别感谢我的朋友 SorziaX,尽管他没有 Whosebug 帐户。
我现在的 NSDateFormatter 有一些问题。
当我将dateStyle设置为ShortStyle
时,如果我将模拟器的语言设置为简体中文,代码就可以运行。如果我将日期设置为 2015-04-20
,它将显示 15/4/20
。根据documentation,这个结果是正确的。而且由于我设置了dateFormatter
的locale,所以日期会显示成year/month/date
的格式,符合中国人的日期书写习惯。
ShortStyle
Specifies a short style, typically numeric only, such as “11/23/37” or “3:30 PM”.
如果我把模拟器的语言设置成日文,同样的代码会导致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'
,该如何解决?
朋友看了代码指出了问题
这个问题是由于Chinese/Japanese和英文的日期格式不同造成的。在 Chinese/Japanese 中,日期格式为 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
表示 Chinese/Japanese,month/date/year
表示英语。)
特别感谢我的朋友 SorziaX,尽管他没有 Whosebug 帐户。