//In NSDate category:
+ (NSString *)timeWithFormat:(NSString *)format {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = format;
return [formatter stringFromDate:[NSDate date]];
}
//Swift3.0 invoke method:
let nowHour: Int = Int(NSDate.time(withFormat: "HH"))!//Crash code,I can not be reproduced
我认为在致电[formatter stringFromDate:[NSDate date]]
时,[NSDate date]
代码的返回值可能是nil
。这可能发生吗?如果是这样,如何重现它? NSDate date return nil question
答案 0 :(得分:0)
从查看代码我认为这是一个区域设置问题。并非所有语言环境都使用0-9来表示时间。
如果我在可用于我的所有740语言环境标识符上运行您的代码,则其中有60个会失败。下面列出了此代码失败的区域设置标识符的子集,以及它们的(美国)英文名称及其生成的字符串格式为easy to use and maintain
的下午2点:
"HH"
尝试从像ar Arabic ١٤
ars Najdi Arabic ١٤
as Assamese ১৪
bn Bengali ১৪
ckb Central Kurdish ١٤
dz Dzongkha ༡༤
fa Persian ۱۴
hi Hindi १४
ks Kashmiri ۱۴
lrc Northern Luri ۱۴
mr Marathi १४
my Burmese ၁၄
mzn Mazanderani ۱۴
ne Nepali १४
pa_Arab Punjabi (Arabic) ۱۴
ps Pashto ۱۴
ur_IN Urdu (India) ۱۴
uz_Arab Uzbek (Arabic) ۱۴
这样的字符串创建一个数字会崩溃,因为Int构造函数会返回Int("१४")!
,然后强制解包(nil
)。
如果您对获取给定时间的小时数值感兴趣,我建议您使用适当的日历获取小时日期组件。例如:
!