DotMac

プログラムに関する覚え書き等

GengoCalendarDate

「平成18年1月1日」という元号日付をNSStringをNSDateに変える

メソッドです。(別にNSCalendarDateのエクステンションでなくても構いません





これらを使用しています


正規表現

AGRegex


全角半角変換

http://blogs.dion.ne.jp/fujidana/

但し、変換不可能なキャラクタをそのまま返すように

#pragma mark other characters

} else {

//if (passFwMask & FWHWOtherMask || passHwMask & FWHWOtherMask) {

newChar[j--] = c;

//}

}

としました。






#import <Cocoa/Cocoa.h>


@interface NSCalendarDate (GengoCalendarDate)


+(NSDate*)dateWithGengouString:(NSString*)gengou;

@end




--------------------------------------------------------

//

//  GengoCalendarDate.m

//  GengoCalendarDate エンコードはMacOS日本語にしてください




#import "GengoCalendarDate.h"

#import "NSString_FullwidthHalfwidth.h"

#import "AGRegex.h"



@implementation NSCalendarDate (GengoCalendarDate)


- (int)yearOfHeisei //2000 = 12

{

int year = [super yearOfCommonEra];

return (year -= 1988);//

}


+(NSDate*)dateWithGengouString:(NSString*)gengou // heisei and showa

{

AGRegex* chomp = [AGRegex regexWithPattern:[NSString stringWithCString:"¥n| | "]];

AGRegex* heisei = [AGRegex regexWithPattern:[NSString stringWithCString:"(?<=平成)[0-9]+(?=年)|(?<=平)[0-9]+(?=年)"]];

AGRegex* showa = [AGRegex regexWithPattern:[NSString stringWithCString:"(?<=昭和)[0-9]+(?=年)|(?<=昭)[0-9]+(?=年)"]];

AGRegex* tsuki = [AGRegex regexWithPattern:[NSString stringWithCString:"[0-9]+(?=月)"]];

AGRegex* nichi = [AGRegex regexWithPattern:[NSString stringWithCString:"[0-9]+(?=日)"]];

AGRegexMatch* match;

int nen_int, tsuki_int, nichi_int;

///

NSString* str = [chomp replaceWithString:@"" inString:gengou];

str = [str halfwidthString];

match = [heisei findInString:str];

if( match != nil )

{

nen_int  = [[str substringWithRange: [match range] ] intValue] + 1988;

}else

{

match = [showa findInString:str];

if( match != nil )

{

nen_int  = [[str substringWithRange: [match range] ] intValue] + 1925;

}

}

match = [tsuki findInString:str];

if( match != nil )

tsuki_int = [[str substringWithRange: [match range] ] intValue];

match = [nichi findInString:str];

if( match != nil )

nichi_int = [[str substringWithRange: [match range] ] intValue];

NSString* format = [NSString stringWithFormat:@"%d,%d,%d",nen_int ,tsuki_int, nichi_int];

NSCalendarDate* calenderDate = [NSCalendarDate 

    dateWithString: format 

    calendarFormat:@"%Y,%m,%d"];

//NSLog(@"%@",[calenderDate descriptionWithCalendarFormat:@"%y/%B/%d/%A"]);

return (NSDate*)calenderDate;

}


@end


 

Parting Words (著作権, 連絡先情報, etc.)