在开发iOS程序时对日期处理的总结

转载 2015年07月10日 14:32:51

小贴士(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程序时对日期处理的总结

http://kevin-wu.net/ios-locale-and-calendar-tips/  由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等...
  • fightper
  • fightper
  • 2013年12月09日 17:04
  • 441

在开发iOS程序时对日期处理的总结

由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。这篇文章总结一下程...
  • jiajiayouba
  • jiajiayouba
  • 2015年02月05日 19:00
  • 681

在开发iOS程序时对日期处理的总结

由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。这篇文章总结一下程...
  • u010795305
  • u010795305
  • 2013年06月06日 10:46
  • 376

在开发iOS程序时对日期处理的总结

由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。这篇文章总结一下程...
  • ifumu2011
  • ifumu2011
  • 2013年11月06日 15:32
  • 576

在开发iOS程序时对日期处理的总结

由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。这篇文章总结一下程...
  • primer_programer
  • primer_programer
  • 2013年09月02日 20:01
  • 1629

使用JDBC开发数据库应用程序

使用JDBC开发数据库应用程序
  • m0_37105443
  • m0_37105443
  • 2017年03月16日 09:35
  • 171

iOS仿酒店入住离店日历(Calendar)选择

最近做一个项目,有个日历选择功能,就仿美团做了一个,将思路、代码分享一下。先上图片,直观体验一下Demo下载地址:http://download.csdn.net/download/techalley...
  • TechAlleyBoy
  • TechAlleyBoy
  • 2017年05月12日 16:57
  • 1463

在iOS开发中对日期处理的总结

由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。 用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。 我写这篇文章...
  • Junyan_Jaya
  • Junyan_Jaya
  • 2016年01月26日 09:18
  • 111

在IOS开发中对日期处理的总结

由于iOS的设备对应多国语言,用户也可以选择不同的日历模式。比如日本的和历,泰国日历等等。 用户也可以自行设定24小时制或者12小时制来显示时间。这些设置会直接影响应用程序取得的日期。 我写这...
  • huang2009303513
  • huang2009303513
  • 2014年09月27日 12:37
  • 618

想象5年后的你-----写给对程序迷茫的人

想象5年后的你-----写给对程序迷茫的人 想起《想象5年后的你》这篇文章,源于到现在正好工作五年了,不短也不长,最近一起工作的同事刚刚学校毕业,实战经验不足,上手工作稍显吃力,但是当被问及三年...
  • wangdxh
  • wangdxh
  • 2014年07月14日 11:35
  • 475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在开发iOS程序时对日期处理的总结
举报原因:
原因补充:

(最多只允许输入30个字)