在开发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的话)

转自:http://www.cocoachina.com/bbs/read.php?tid=135336

时间: 2024-08-29 07:21:48

在开发iOS程序时对日期处理的总结的相关文章

VisualStudio2015使用C#.NET开发IOS程序时进行真机测试的设置参考

VS2015+Xamarin使用C#.NET开发跨平台APP已经完全可行了,对了WP和UWP程序,都是MS的,一定没有问题. 而对于ANDROID则是直接可以在VS中进行开发.部署到模拟器和真机,非常简单. 而对于IOS程序,如果使用模拟器,也是比较容易,只要把VS和MAC+Xamarin配置 好,基本就可以玩了. 然后如果使用IPHONE.IPAD等真机则还有较多步骤需要设置,本文主要针对IOS真机测试的设置进行介绍,供大家参考. 使用VS2015开发的IOS程序,不论是IOS的native还

在Eclipse中开发Android程序时截屏的方法

在Eclipse中调试Android程序时,有时需要将程序截图保存到电脑中.步骤如下: Window --- Show View --- Other : 在弹出的窗口中,选择 Devices : 在打开的Device选项卡中,选择要截图的设备或模拟器,然后点击旁边的截图按钮: 在弹出的窗口中,点击 Save 按钮,将程序截图保存到指定的目录中即可.

如何更好滴开发iOS程序

1. 如何才能更好地学习IOS,要学会分析问题,锻炼解决问题的能力.要懂得分析思路,而不是死记硬背一些方法,要善学习,会学习. 2.要时刻牢记UI界面上的每一个元素都是对象,万物皆对象! 3.庆幸我们是站在巨人的肩膀上编程! 4.不要让自己成为视频控,要懂得学习被人所长,要乐于分享.

eclipse开发mapreduce程序时出现的问题

1.报HDFS权限不够:org.apache.hadoop.security.AccessControlException: Permission denied:user=ouqiping, access=WRITE, inode="/user/Administrator/DatingRecommender/ratings.dat":root:supergroup:drwxr-xr-x 解决办法: 到服务器上修改hadoop的配置文件:conf/hdfs-core.xml, 找到 df

.net开发客户端程序时,如何选择framework版本?

如果使用wpf,那么最佳的选择应该是.net framework 3.5 client profile,能支持xp. 使用3.5 client profile,比较大的问题是微软没有提供没有独立安装包,仅支持web安装,如果客户端不能上网,那... 恐怕只好给用户提供.net framework 3.5 的二百多兆的完整安装包了. 为什么不用.net framework 4.0 client profile? 4.0要求操作系统至少为xp sp3,目前(2015.09.25)还有不少的用户的xp

使用eclipse开发hbase程序时缺少包错误

在win上的eclipse进行配置hbase,然后编写一个简单的创建表的操作,使用ant的build.xml进行运行报错: [sshexec] Connecting to 192.168.60.111:22 [sshexec] cmd : /opt/hadoop/bin/hadoop jar /home/hadoop_jar/HbaseApp1.jar hbasetest.HbaseApp1 [sshexec] Exception in thread "main" [sshexec]

【iOS开发-32】iOS程序真机调试需要购买调试证书怎么办?

一.情况 我们在开发iOS程序的时候,一般都是在模拟器上运行查看效果的.但是,当开完完成,需要在真机上调试怎么办? 二.官方解决办法 苹果有为个人和企业开发者提供调试证书和发布证书,个人版99美元吧.购买后,发两个证书给你,你用调试证书可以在真机上进行调试. 三.万能的淘宝 无意中发现在淘宝上有出售调试证书的,价格在10元左右. 注意:该证书仅仅能用来进行调试,不能进行发布. 但,一般开发者开发程序都是为了发布,最终还是要付99美元,所以一般人都是直接向苹果购买两个证书.估计这也是为什么淘宝上得

C#语言开发iOS 应用程序

mono吧,开源的.net 到这下载framework  www.mono-project.com 到这下载IDE  www.monodevelop.com  mono的目标是用c#开发iOS程序... 版权声明:本文为博主原创文章,未经博主允许不得转载.

【iOS开发-32】iOS程序真机调试须要购买调试证书怎么办?

一.情况 我们在开发iOS程序的时候,一般都是在模拟器上执行查看效果的. 可是,当开完完毕.须要在真机上调试怎么办? 二.官方解决的方法 苹果有为个人和企业开发人员提供调试证书和公布证书.个人版99美元吧. 购买后,发两个证书给你,你用调试证书能够在真机上进行调试. 三.万能的淘宝 无意中发如今淘宝上有出售调试证书的,价格在10元左右. 注意:该证书只能用来进行调试.不能进行公布. 但,一般开发人员开发程序都是为了公布.终于还是要付99美元,所以一般人都是直接向苹果购买两个证书. 预计这也是为什