「平成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


