在iOS开发中对日期处理的总结
来源:互联网 发布:android手机助手源码 编辑:程序博客网 时间:2024/05/29 18:02
由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。
用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。
我写这篇文章来总结一下程序中相关的类和设备的各种设定的关系。
NSCalendar
[NSCalendar currentCalendar]
[NSCalendar autoupdatingCurrentCalendar]
系统的设置 > 通用 > 多语言环境 > 日历
上述的日历设置和NSCalendar是有直接关系的。
■比如设定成「日本日历」的时候、currentCalendar的值是NSJapaneseCalendar
■设定成「公历」的时候、currentCalendar的值是NSGregorianCalendar
注意:在程序中,currentCalendar取得的值会一直保持在cache中,第一次取得以后如果用户修改该系统日历设定,这个值也不会改变。如果用autoupdatingCurrentCalendar,那么每次取得的值都会是当前系统设置的日历的值。
系统中定义的日历有:
NSString * const NSGregorianCalendar;公历(常用)NSString * const NSBuddhistCalendar;佛教日历NSString * const NSChineseCalendar;中国农历(常用)NSString * const NSHebrewCalendar;希伯来日历NSString * const NSIslamicCalendar;伊斯兰历NSString * const NSIslamicCivilCalendar;伊斯兰教日历NSString * const NSJapaneseCalendar;日本日历(和历,常用)NSString * const NSRepublicOfChinaCalendar;中华民国日历(台湾)NSString * const NSPersianCalendar;波斯历NSString * const NSIndianCalendar; 印度日历NSString * const NSISO8601Calendar;ISO8601(但是现在还不可用)通过Calendar可以设置TimeZone和Locale。
如果你要通过NSDateFormatter来设置日期格式,比如”yyyy-MM-dd”等,那需要注意对Formatter设置日历。
如果想要用公历的时候,就要将NSDateFormatter的日历设置成公历。否则随着用户的系统设置的改变,取得的日期的格式也会不一样。
[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:calendar];
NSLocale
[NSLocale currentLocale]
[NSLocale systemLocale]
[NSLocale autoUpdatingCurrentLocale]
NSLocale与下面的设置有关:
系统的设置 > 通用 > 多语言环境 > 区域格式
系统的设置 > 通用 > 日期与时间 > 24小时制
根据国家区域的设置的不同,格式也会不一样,例如:
中国: 「11月」 美国:「November」
中国: 「上午」 美国:「AM」
如果你的应用程序在多个国家发布,那你就需要注意设置NSLocale。
比如:
[[NSLocale alloc] initWithLocaleIdentifier:@”en_US”]
cunnretLocale是用户设定的值。
systemLocale是设备默认的值。
NSDateFormatter
理解日期格式的设置非常重要。
有时候会遇到下面的情况:
比如你将格式设置成
@”yyyy-MM-dd HH:mm:ss”
但显示出来的却是
「0024-11-16 21:09:17」
(这个时候用户把日历设置成了日本日历)
又或者显示成
「2012-11-17 下午11:07:47」
(24小时制关闭的时候)
上述的情况如果不考虑到的话,那程序中就会出现bug。
如果将日期的格式的日历设置成公历,
NSDateFormatter 设置成 NSGregorianCalendar,
需要用24小时制的时候,可以把Locale设置成systemLocale。
(如果你没有特定需要指定的Locale的话)
- 在IOS开发中对日期处理的总结
- 在iOS开发中对日期处理的总结
- 在开发iOS程序时对日期处理的总结
- 在开发iOS程序时对日期处理的总结
- 在开发iOS程序时对日期处理的总结
- 在开发iOS程序时对日期处理的总结
- 在开发iOS程序时对日期处理的总结
- 在开发iOS程序时对日期处理的总结
- iOS开发之对日期格式处理的总结
- 浅析ETL中对日期的处理
- JAVA中对日期格式的处理
- html5中对日期的处理
- java中对日期的处理
- java中对日期处理
- Date对日期的处理
- SSH对日期的处理
- json对日期的处理
- js 对日期的处理
- 解决 ORA-28547 连接服务器失败,可能是Oracle Net 管理错误
- clean项目之后R文件直接报错或者消失
- iOS-警告收录及科学快速的消除方法
- 每个 LaTeX 用户都应该使用的 9 个宏包
- java+html5的websocket简单实现BS聊天DEMO实例
- 在iOS开发中对日期处理的总结
- Boost 学习之算法篇 any_of 与 any_of_equal
- Linux开机进入图形桌面的方法
- Androidx学习笔记(23)-- 创建ListView展示数据库的数据
- 性能分析工具 TProfiler
- 主流的国外机房地址
- iOS UISearchController
- MFC 绘制 PNG 格式图片
- vc中分割字符串函数,自己写的函数