小贴士(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. jQuery 基础知识

    一.序言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后的又一个优秀的JavaScript代码库(JavaScript框架).jQuery设计的宗旨是"W ...

  2. 【转载】Asp.Net中Cookie对象的作用以及常见属性

    Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...

  3. 【转】使用Scanner输入字符串时next()和nextLine()区别

    在实现字符窗口的输入时,很多人更喜欢选择使用扫描器Scanner,它操作起来比较简单.在编程的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但 ...

  4. Python-pptx库的运用

    Win32com该库需要调用Microsoft PowerPoint,我将重新安装计算机Win 10,简单安装了pycharm的最新版本,然后发现创建的项目与之前的创建的项目结构不同.还有更多这样的事 ...

  5. DoraBox漏洞测试环境搭建和测试过程

    未完待续...

  6. Python + Selenium 主要实现的功能

    selenium 技术 元素定位的几种方法 WebDriver API ,selenium IDE,selenium grid python 技术 函数.类.方法: 读写文件, unitest单元测试 ...

  7. The New Stack:KubeEdge将Kubernetes的能力延伸至边缘

    3月29日,权威技术分析网站The New Stack在Edge/IoT专栏发表了关于边缘计算项目KubeEdge的最新调研报告.原文观点如下: https://github.com/kubeedge ...

  8. leetcode刷题-1

    小A 和 小B 在玩猜数字.小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜.他们一共进行三次这个游戏,请返回 小A 猜对了几次? 输入的guess数组为 小 ...

  9. 02_Tutorial 2: Requests and Responses 请求和响应

    1.请求和响应 1.文档 https://www.django-rest-framework.org/tutorial/2-requests-and-responses/ https://q1mi.g ...

  10. 学到了武沛齐讲的Day14完

    & 交 |   并 ^   并-交 --------------------- 格式化 %s  字符串,数字,一切 %.4s  留前面4位 %d 数字 %f   小数保留6位 四舍五入 %0. ...