首页 技术 正文
技术 2022年11月23日
0 收藏 896 点赞 2,318 浏览 2599 个字

看过某书上面的做法是先生成一个公历的calendar,使用的是:

NSCalendar *cal = [NSCalendar currentCalendar];

然后用它生成一个NSDateComponent,最后再用一个中国农历的calendar将NSDateComponent转换为一个农历的NSDate。

实际执行后发现转换后的日期是错的。

下面是一个正确的转换方法,关键在于:先生成一个农历的calendar,然后再转换为公历的表示:

void show_local_date(NSDate *date){    NSDateFormatter *f = [NSDateFormatter new];    [f setDateFormat:@"Y-M-d HH:mm:ss z"];    [f setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+8"]];    NSLog(@"%s:date is %@",__func__,[f stringFromDate:date]);}int main(void){    @autoreleasepool{        NSLog(@"now is %@",[NSDate new]);        NSCalendar *chinese_cal = [[NSCalendar alloc] initWithCalendarIdentifier:            NSCalendarIdentifierChinese];        [chinese_cal setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+8"]];        unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay |\            NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;        NSDateComponents *comps = [chinese_cal components:unitFlags fromDate:[NSDate new]];        NSCalendar *cal = [NSCalendar currentCalendar];        NSDate *china_now = [cal dateFromComponents:comps];        show_local_date(china_now);        NSLog(@"%@",[Foo getChineseCalendarWithDate:[NSDate new]]);    }    return 0;}

最后是其他人写的转换代码,和我的类似:

+(NSString*)getChineseCalendarWithDate:(NSDate *)date{    NSArray *chineseYears = [NSArray arrayWithObjects:                       @"甲子", @"乙丑", @"丙寅", @"丁卯",  @"戊辰",  @"己巳",  @"庚午",  @"辛未",  @"壬申",  @"癸酉",                       @"甲戌",   @"乙亥",  @"丙子",  @"丁丑", @"戊寅",   @"己卯",  @"庚辰",  @"辛己",  @"壬午",  @"癸未",                       @"甲申",   @"乙酉",  @"丙戌",  @"丁亥",  @"戊子",  @"己丑",  @"庚寅",  @"辛卯",  @"壬辰",  @"癸巳",                       @"甲午",   @"乙未",  @"丙申",  @"丁酉",  @"戊戌",  @"己亥",  @"庚子",  @"辛丑",  @"壬寅",  @"癸丑",                       @"甲辰",   @"乙巳",  @"丙午",  @"丁未",  @"戊申",  @"己酉",  @"庚戌",  @"辛亥",  @"壬子",  @"癸丑",                       @"甲寅",   @"乙卯",  @"丙辰",  @"丁巳",  @"戊午",  @"己未",  @"庚申",  @"辛酉",  @"壬戌",  @"癸亥", nil];    NSArray *chineseMonths=[NSArray arrayWithObjects:                        @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",                        @"九月", @"十月", @"冬月", @"腊月", nil];    NSArray *chineseDays=[NSArray arrayWithObjects:                      @"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",                      @"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十",                      @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十",  nil];    NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay |\        NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;    NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];    NSLog(@"%ld_%ld_%ld  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);    NSString *y_str = [chineseYears objectAtIndex:localeComp.year-1];    NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-1];    NSString *d_str = [chineseDays objectAtIndex:localeComp.day-1];    NSString *chineseCal_str =[NSString stringWithFormat: @"%@_%@_%@",y_str,m_str,d_str];    //[localeCalendar release];    return chineseCal_str;}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,291
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,718
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,554
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,325
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,963
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,123