小贴士(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程序时对日期处理的总结的更多相关文章

  1. 编译iOS程序时的-all_load选项,以及-all_load 导致的 ld duplicate symbol xx的问题

    在新的SDK环境中调试百度地图的应用程序时,app总是意外退出,找了半天发现错误的原因是unrecognized selector xx的错误,另外还有报了一个Unknown class XXX in ...

  2. Delphi 10.2.3 + Xcode 9.2 开发 IOS 程序,免证书+免越狱,真机调试

    工具列表: 1,delphi 10.2.3 + PAServer19.0. 2,配置好一些的 PC 一台,建议至少 4 代 intel i5 + 16G + 256GSSD,低于此配置将产生拖延症. ...

  3. 解决用Eclipse开发Android程序时不能生成R.java的问题

    今天我照着Mars老师的视频教程开始学习Android程序开发. 但是,我的Eclipse死活不能生成R.java文件,新建的工程也不行. 然后我百度,百度出来的结果一般是说这样解决: 1.clean ...

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

    1.报HDFS权限不够:org.apache.hadoop.security.AccessControlException: Permission denied:user=ouqiping, acce ...

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

    一.情况 我们在开发iOS程序的时候,一般都是在模拟器上执行查看效果的. 可是,当开完完毕.须要在真机上调试怎么办? 二.官方解决的方法 苹果有为个人和企业开发人员提供调试证书和公布证书.个人版99美 ...

  6. 【转】漫谈iOS程序的证书和签名机制

    转自:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  7. 漫谈iOS程序的证书和签名机制

    接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕和崇拜.于是,花了一点时间去研究了一下 ...

  8. ios外派—本公司长年提供ios程序员外派业务(北京动点软件,可签合同)

    北京动点飞扬长年提供ios工程师外派业务. 我公司程序员平均技术情况如下: 1.二年以上iPhone/ipad开发经验:2.熟练使用Xcode.Objective C编码技能:3.熟悉iOS开发框架, ...

  9. 用Bottle开发web程序(二)

    返回码 在开发web程序时,除了一些服务器错误等,常常需要自定义返回码,以便告诉用户处理请求的结果或者状态.bottle支持自定义的返回码,可以通过以下几种方式进行实现. abort 在bottle中 ...

随机推荐

  1. php权限管理

    首先权限管理肯定是需要登陆的,这里就简单的写一个登陆页面. 简单的登陆页面login.php <h1>登录页面</h1> <form action="login ...

  2. Linux软件包(源码包和二进制包)及其区别和特点

    Linux 下的软件包众多,而且几乎都是经 GPL 授权的,也就是说这些软件都免费,振奋人心吧?而且更棒的是,这些软件几乎都提供源代码(开源的),只要你愿意,就可以修改程序源代码,以符合个人的需求和习 ...

  3. 编译安装的httpd实现服务脚本,通过service和chkconfig进行管理

    把编译安装的httpd 实现服务脚本,通过service和chkconfig 进行管理 1 编译安装httpd 把httpd编译安装在/app/httpd/目录下. 2 在/etc/rc.d/init ...

  4. SQL SERVER-Extendevent

    事件类介绍 https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/ms188275(v=sql.100)

  5. Python面向对象Day2

    一.组合 给一个类的对象分组一个属性,这个属性是另一个类的对象 意义:让类的对象与另一个类的对象产生关系,也叫类与类之间产生关系(继承也能) 好处: ① 让两个类之间产生关系 ② 某一个对象是独立存在 ...

  6. 【清单】值得「等待」的12个指示加载状态的 js 库

    以下优选 GitHub 上高 star 的指示加载状态的 JavaScript 库.另外这里还有10个有意思的 JavaScript 实战小项目供大家学习. 上期入口:一份数据分析学习清单.xls M ...

  7. CEIWEI CommTone串口调试精灵7.1 串口调试 串口工具

    CEIWEI CommTone串口调试精灵   是一款功能强大的串行端口通信调试软件,内嵌超过100种标准的CRC校验功能,并支校验结果高低位字节前导转换:支持批量协议调试,并支持文件.16进制.UN ...

  8. Python中的时间

    coding:utf-8 from time import strftime, localtime import time print(time.time()) time1=strftime('%Y- ...

  9. 日期时间格式化 SimpleDateFormat与DateTimeFormatter

    原文:https://www.jianshu.com/p/b212afa16f1f 1.SimpleDateFormat为什么不是线程安全的? 如果我们把SimpleDateFormat定义成stat ...

  10. dt7.0百度熊掌当天主动推送方法

    因自己没事新做了一个网站,申请了一个熊掌号,所以做了这个主动推送接口,希望能收录快些,在此分享下关于DT7.0主动当天推送功能 上代码: <?php /* 百度当天主动推送熊掌功能 作者:68喜 ...