在开发iOS程序时对日期处理的总结
小贴士(Tips)-iOS
由于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 *calendar =
[[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程序时的-all_load选项,以及-all_load 导致的 ld duplicate symbol xx的问题
在新的SDK环境中调试百度地图的应用程序时,app总是意外退出,找了半天发现错误的原因是unrecognized selector xx的错误,另外还有报了一个Unknown class XXX in ...
- Delphi 10.2.3 + Xcode 9.2 开发 IOS 程序,免证书+免越狱,真机调试
工具列表: 1,delphi 10.2.3 + PAServer19.0. 2,配置好一些的 PC 一台,建议至少 4 代 intel i5 + 16G + 256GSSD,低于此配置将产生拖延症. ...
- 解决用Eclipse开发Android程序时不能生成R.java的问题
今天我照着Mars老师的视频教程开始学习Android程序开发. 但是,我的Eclipse死活不能生成R.java文件,新建的工程也不行. 然后我百度,百度出来的结果一般是说这样解决: 1.clean ...
- eclipse开发mapreduce程序时出现的问题
1.报HDFS权限不够:org.apache.hadoop.security.AccessControlException: Permission denied:user=ouqiping, acce ...
- 【iOS开发-32】iOS程序真机调试须要购买调试证书怎么办?
一.情况 我们在开发iOS程序的时候,一般都是在模拟器上执行查看效果的. 可是,当开完完毕.须要在真机上调试怎么办? 二.官方解决的方法 苹果有为个人和企业开发人员提供调试证书和公布证书.个人版99美 ...
- 【转】漫谈iOS程序的证书和签名机制
转自:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...
- 漫谈iOS程序的证书和签名机制
接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕和崇拜.于是,花了一点时间去研究了一下 ...
- ios外派—本公司长年提供ios程序员外派业务(北京动点软件,可签合同)
北京动点飞扬长年提供ios工程师外派业务. 我公司程序员平均技术情况如下: 1.二年以上iPhone/ipad开发经验:2.熟练使用Xcode.Objective C编码技能:3.熟悉iOS开发框架, ...
- 用Bottle开发web程序(二)
返回码 在开发web程序时,除了一些服务器错误等,常常需要自定义返回码,以便告诉用户处理请求的结果或者状态.bottle支持自定义的返回码,可以通过以下几种方式进行实现. abort 在bottle中 ...
随机推荐
- 如果只有1小时学Python,看这篇就够了
大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...
- Java 之 Junit 单元测试
Junit 单元测试 测试分类: 1.黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2.白盒测试:需要写代码.关注程序具体的执行流程. Junit 测试:(属于白盒测试) 步骤: 1 ...
- CVE-2019-11517 CSRF in Wampserver 3.1.4-3.1.8
https://www.cnblogs.com/iAmSoScArEd/ Affected product:WampServer 3.1.4-3.1.8 Offiical description:&q ...
- awk 表达式
awk动作表达式中的算数运算符 awk动作表达式中的算数运算符 案例演示 使用awk计算/etc/services中的空白行数 awk 'BEGIN{sum=0}/^$/{++sum}END{prin ...
- DB2检查数据在各节点分布情况
情景:总所周知,DB2的表空间(数据)在节点中存储是根据每张表的分区键来分布的,如果分区键建的不好,会直接导致表空间在各节点的占用大小不均匀,久而久之,其中一个或几个节点的大小已所剩无几,其他的却依旧 ...
- Computer Vision_33_SIFT:LIFT: Learned Invariant Feature Transform——2016
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- Elasticsearch 入门,基本概念和操作
基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...
- python之csv操作
在使用python爬虫时或者其他情况,都会用到csv存储与读取的相关操作,我们在这里就浅谈一下: CSV(Comma-Separated Values)逗号分隔符,也就是每条记录中的值与值之间是用分号 ...
- c# 值传递
- Go数据类型之基本数据类型
不想沦为芸芸众生的人只需做一件事,便是对自己不再散漫:他应当听从良知的呼唤:“成为你自己!” ---尼采 1.整型 有符号整数类型:int8.int16.int32和int64 无符号整数类型:uin ...