声明:以下为使用iOS的 NSChineseCalendar 网上之前发现有人说这个方法不是完全准确,有些日期会显示的不对,本人没有验证过,也实在懒得用C++那套方法去实现。

另外我做的不过是个简单的功能,还不包括什么节气 节日那些复杂有高端的功能,如果哪位大神不吝赐教 小弟在此感激了。

方法总的说来就这样:

 +(NSString*)getChineseCalendarWithDate:(NSDate *)date{  

     NSArray *chineseYears = [NSArray arrayWithObjects:  

                        @"甲子", @"乙丑", @"丙寅", @"丁卯",  @"戊辰",  @"己巳",  @"庚午",  @"辛未",  @"壬申",  @"癸酉",  

                        @"甲戌",   @"乙亥",  @"丙子",  @"丁丑", @"戊寅",   @"己卯",  @"庚辰",  @"辛己",  @"壬午",  @"癸未",  

                        @"甲申",   @"乙酉",  @"丙戌",  @"丁亥",  @"戊子",  @"己丑",  @"庚寅",  @"辛卯",  @"壬辰",  @"癸巳",  

                        @"甲午",   @"乙未",  @"丙申",  @"丁酉",  @"戊戌",  @"己亥",  @"庚子",  @"辛丑",  @"壬寅",  @"癸丑",  

                        @"甲辰",   @"乙巳",  @"丙午",  @"丁未",  @"戊申",  @"己酉",  @"庚戌",  @"辛亥",  @"壬子",  @"癸丑",  

                        @"甲寅",   @"乙卯",  @"丙辰",  @"丁巳",  @"戊午",  @"己未",  @"庚申",  @"辛酉",  @"壬戌",  @"癸亥", nil];  

     NSArray *chineseMonths=[NSArray arrayWithObjects:  

                         @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",   

                         @"九月", @"十月", @"冬月", @"腊月", nil];  

     NSArray *chineseDays=[NSArray arrayWithObjects:  

                       @"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",   

                       @"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十",  

                       @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十",  nil];  

     NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];  

     unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;  

     NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];  

     NSLog(@"%d_%d_%d  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);  

     NSString *y_str = [chineseYears objectAtIndex:localeComp.year-];  

     NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-];  

     NSString *d_str = [chineseDays objectAtIndex:localeComp.day-];  

     NSString *chineseCal_str =[NSString stringWithFormat: @"%@_%@_%@",y_str,m_str,d_str];  

     [localeCalendar release];  

     return chineseCal_str;  

 }  

如果需要也可以拆成单独的函数来方便获取,例如获取月份:

 +(NSString*)getChineseMonthWithDate:(NSDate *)date{  

     NSArray *chineseMonths=[NSArray arrayWithObjects:  

                             @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",   

                             @"九月", @"十月", @"冬月", @"腊月", nil];  

     NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];  

     unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;  

     NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];  

     //NSLog(@"%d_%d_%d  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);  

     NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-];  

     [localeCalendar release];  

     return m_str;  

 }  

另外如果不知道如何获取NSDate 那么额外加个方法用来根据string和format来得到对应的 NSDate:

 +(NSDate *)getDateWithDateString:(NSString *)strDate formatString:(NSString*)strFormat{  

     NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];   

     NSTimeZone *timeZone =  [NSTimeZone timeZoneWithAbbreviation:@"GMT"];   

     //NSTimeZone *localTime = [NSTimeZone localTimeZone];    

     [formatter setTimeZone:timeZone];    

     [formatter setDateFormat : strFormat];        

     NSDate *dateTime = [formatter dateFromString:strDate];  

     return dateTime;  

 }  

使用方法类似这样,比如获取世界末日那一时刻的Date~~~

 NSDate *date = [Tool_Functions getDateWithDateString:@"2012-12-21 15:14:35"   

                                             formatString:@"yyyy-MM-dd HH:mm:ss"];  

转载文章,原文点击

IOS 获取农历方法(转)的更多相关文章

  1. iOS获取电量方法

    ios简单的方法: [UIDevice currentDevice].batteryMonitoringEnabled = YES; double deviceLevel = [UIDevice cu ...

  2. iOS获取一个方法的执行时间

    #import <Foundation/Foundation.h> #import <mach/mach_time.h> typedef void (^block)(void) ...

  3. iOS获取时间、日期

    //获取当前时间 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init]autorelease]; [formatter setLoc ...

  4. iOS 获取公历、农历日期的年月日

    iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...

  5. iOS获取设备唯一标识的8种方法

    8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...

  6. iOS 获取文件的目录路径的几种方法 [转]

    iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. d ...

  7. IOS 获取最新设备型号方法

    1.IOS 获取最新设备型号方法列表最新对照表:http://theiphonewiki.com/wiki/Models方法: #import "sys/utsname.h” struct ...

  8. iOS键盘中英文切换键盘高度获取通知方法

    iOS键盘中英文切换键盘高度获取通知方法, 有需要的朋友可以参考下. 注册通知 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppea ...

  9. [转载] IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

    IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

随机推荐

  1. 理想中的 PCB 文件格式

    理想中的 PCB 文件格式 因为平时写代码使用 git,在画 PCB 也使用 git 来管理 PCB 文件. 但是 PCB 文件是二进制的,所以在比较时非常麻烦. 虽然 PCB 文件可以导出 文本文件 ...

  2. Android Java访问本地方法(JNI)

    当功能需要本地代码实现的时候,Java 代码就需要调用本地代码. 在调用本地代码时,首先要保证本地代码被加载到 Java 执行环境中并与 Java 代码连接在一起,这样 Java 代码在调用本地方法时 ...

  3. linux误删数据恢复

    linux下数据恢复工具有: 1.通过分析文件系统的日志,解析文件的inode,可以恢复ex3 ex4的文件系统下的数据 extundelete:扫描inode和恢复数据同时进行,因此恢复速度很快.支 ...

  4. NumPy-快速处理数据--矩阵运算

    本文摘自<用Python做科学计算>,版权归原作者所有. 1. NumPy-快速处理数据--ndarray对象--数组的创建和存取 2. NumPy-快速处理数据--ndarray对象-- ...

  5. ElasticSearch读取查询结果(search)

    本文转载自:http://blog.csdn.net/wangxiaotongfan/article/details/46531729?locationNum=6 在es中所有的查询结果都会保存在Se ...

  6. 安装FreePBX

    这个我自己装完以后发现freepbx页面虽然出来了,但是还有一些错误,所以这个我就放弃了,你们可以参考上面的安装freePBX的ISO版本,跟这个是一样的,不过要新建虚拟机的 1:更新系统 yum - ...

  7. Codeforces-417D总结&题解

    在分析题目前,一定要完全读懂题目意思,否则一些都是白搭.这道理谁都懂,但是能每次都做到的人不多.比如本人,这次又粗心地在这里疯狂地踩坑了. (1)本题有这么一句话:But Gena's friends ...

  8. 【洛谷】P1095 守望者的逃离(递推)

    题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

  9. java死锁及解决方案

    死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源.避免死锁方针:a:避免嵌套封锁:这是死锁最主要的原因的,如果你已经有一个资源了就要避免封锁另一个资 ...

  10. Cisco交换机配置VLAN与TRUNK

    0x00前言: 今日在学校里学习了如何搭建vlan和配置等等还有trunk. 由于快下课了.尽快写. 0x01准备: Cisco模拟器 0x02正文: 要求: VLAN 10 左边的IP:192.16 ...