278 lines
8.0 KiB
Objective-C
Executable File
278 lines
8.0 KiB
Objective-C
Executable File
//
|
|
// SSLunarDateFormatter.m
|
|
// SSLunarDate
|
|
//
|
|
// Created by Jiejing Zhang on 13-2-7.
|
|
// Copyright (c) 2013 Jiejing Zhang. All rights reserved.
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software Foundation,
|
|
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
//
|
|
|
|
#import "SSLunarDateFormatter.h"
|
|
|
|
#define YEAR_STR NSLocalizedString(@"年", "year")
|
|
#define LEAP_STR NSLocalizedString(@"闰", "leap")
|
|
|
|
@interface SSLunarDateFormatter()
|
|
{
|
|
NSArray *_monthArray;
|
|
NSArray *_dayArray;
|
|
NSArray *_ganArray;
|
|
NSArray *_zhiArray;
|
|
NSArray *_zodiacArray;
|
|
NSArray *_solarTerm;
|
|
}
|
|
@end
|
|
|
|
|
|
static SSLunarDateFormatter *_sharedFormatter = NULL;
|
|
|
|
@implementation SSLunarDateFormatter
|
|
|
|
+ (SSLunarDateFormatter *)sharedLunarDateFormatter
|
|
{
|
|
@synchronized([SSLunarDateFormatter class]) {
|
|
if (!_sharedFormatter)
|
|
_sharedFormatter = [[self alloc] init];
|
|
return _sharedFormatter;
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
+ (id) alloc
|
|
{
|
|
@synchronized([SSLunarDateFormatter class]) {
|
|
NSAssert(_sharedFormatter == NULL, @"attempt to alloc a second SharedLunarDateFormatter");
|
|
_sharedFormatter = [super alloc];
|
|
return _sharedFormatter;
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
- (NSArray *) monthArray
|
|
{
|
|
if (!_monthArray)
|
|
_monthArray = @[
|
|
NSLocalizedString(@"正月",""),
|
|
NSLocalizedString(@"二月",""),
|
|
NSLocalizedString(@"三月",""),
|
|
NSLocalizedString(@"四月",""),
|
|
NSLocalizedString(@"五月",""),
|
|
NSLocalizedString(@"六月",""),
|
|
NSLocalizedString(@"七月",""),
|
|
NSLocalizedString(@"八月",""),
|
|
NSLocalizedString(@"九月",""),
|
|
NSLocalizedString(@"十月",""),
|
|
NSLocalizedString(@"十一月",""),
|
|
NSLocalizedString(@"腊月","")];
|
|
|
|
return _monthArray;
|
|
}
|
|
|
|
- (NSArray *) dayArray
|
|
{
|
|
if (!_dayArray)
|
|
_dayArray = @[
|
|
NSLocalizedString(@"初一",""),
|
|
NSLocalizedString(@"初二",""),
|
|
NSLocalizedString(@"初三",""),
|
|
NSLocalizedString(@"初四",""),
|
|
NSLocalizedString(@"初五",""),
|
|
NSLocalizedString(@"初六",""),
|
|
NSLocalizedString(@"初七",""),
|
|
NSLocalizedString(@"初八",""),
|
|
NSLocalizedString(@"初九",""),
|
|
NSLocalizedString(@"初十",""),
|
|
NSLocalizedString(@"十一",""),
|
|
NSLocalizedString(@"十二",""),
|
|
NSLocalizedString(@"十三",""),
|
|
NSLocalizedString(@"十四",""),
|
|
NSLocalizedString(@"十五",""),
|
|
NSLocalizedString(@"十六",""),
|
|
NSLocalizedString(@"十七",""),
|
|
NSLocalizedString(@"十八",""),
|
|
NSLocalizedString(@"十九",""),
|
|
NSLocalizedString(@"二十",""),
|
|
NSLocalizedString(@"廿一",""),
|
|
NSLocalizedString(@"廿二",""),
|
|
NSLocalizedString(@"廿三",""),
|
|
NSLocalizedString(@"廿四",""),
|
|
NSLocalizedString(@"廿五",""),
|
|
NSLocalizedString(@"廿六",""),
|
|
NSLocalizedString(@"廿七",""),
|
|
NSLocalizedString(@"廿八",""),
|
|
NSLocalizedString(@"廿九",""),
|
|
NSLocalizedString(@"三十","")];
|
|
|
|
return _dayArray;
|
|
}
|
|
|
|
- (NSArray *) ganArray
|
|
{
|
|
if (!_ganArray)
|
|
_ganArray = @[
|
|
NSLocalizedString(@"甲",""),
|
|
NSLocalizedString(@"乙",""),
|
|
NSLocalizedString(@"丙",""),
|
|
NSLocalizedString(@"丁",""),
|
|
NSLocalizedString(@"戊",""),
|
|
NSLocalizedString(@"己",""),
|
|
NSLocalizedString(@"庚",""),
|
|
NSLocalizedString(@"辛",""),
|
|
NSLocalizedString(@"壬",""),
|
|
NSLocalizedString(@"癸","")];
|
|
return _ganArray;
|
|
}
|
|
|
|
- (NSArray *) zhiArray
|
|
{
|
|
if (!_zhiArray)
|
|
_zhiArray = @[
|
|
NSLocalizedString(@"子",""),
|
|
NSLocalizedString(@"丑",""),
|
|
NSLocalizedString(@"寅",""),
|
|
NSLocalizedString(@"卯",""),
|
|
NSLocalizedString(@"辰",""),
|
|
NSLocalizedString(@"巳",""),
|
|
NSLocalizedString(@"午",""),
|
|
NSLocalizedString(@"未",""),
|
|
NSLocalizedString(@"申",""),
|
|
NSLocalizedString(@"酉",""),
|
|
NSLocalizedString(@"戌",""),
|
|
NSLocalizedString(@"亥","")];
|
|
return _zhiArray;
|
|
}
|
|
|
|
- (NSArray *) zodiacArray
|
|
{
|
|
if (!_zodiacArray)
|
|
_zodiacArray = @[
|
|
NSLocalizedString(@"鼠",""),
|
|
NSLocalizedString(@"牛",""),
|
|
NSLocalizedString(@"虎",""),
|
|
NSLocalizedString(@"兔",""),
|
|
NSLocalizedString(@"龙",""),
|
|
NSLocalizedString(@"蛇",""),
|
|
NSLocalizedString(@"马",""),
|
|
NSLocalizedString(@"羊",""),
|
|
NSLocalizedString(@"猴",""),
|
|
NSLocalizedString(@"鸡",""),
|
|
NSLocalizedString(@"狗",""),
|
|
NSLocalizedString(@"猪","")];
|
|
return _zodiacArray;
|
|
}
|
|
|
|
- (NSArray *) solarTerm
|
|
{
|
|
if (!_solarTerm)
|
|
_solarTerm = @[
|
|
NSLocalizedString(@"立春",""),
|
|
NSLocalizedString(@"雨水",""),
|
|
NSLocalizedString(@"清明",""),
|
|
NSLocalizedString(@"春分",""),
|
|
NSLocalizedString(@"惊蛰",""),
|
|
NSLocalizedString(@"谷雨",""),
|
|
NSLocalizedString(@"立夏",""),
|
|
NSLocalizedString(@"小满",""),
|
|
NSLocalizedString(@"芒种",""),
|
|
NSLocalizedString(@"夏至",""),
|
|
NSLocalizedString(@"小暑",""),
|
|
NSLocalizedString(@"大暑",""),
|
|
NSLocalizedString(@"立秋",""),
|
|
NSLocalizedString(@"处暑",""),
|
|
NSLocalizedString(@"白露",""),
|
|
NSLocalizedString(@"秋分",""),
|
|
NSLocalizedString(@"寒露",""),
|
|
NSLocalizedString(@"霜降",""),
|
|
NSLocalizedString(@"立冬",""),
|
|
NSLocalizedString(@"小雪",""),
|
|
NSLocalizedString(@"大雪",""),
|
|
NSLocalizedString(@"冬至",""),
|
|
NSLocalizedString(@"小寒",""),
|
|
NSLocalizedString(@"大寒","")];
|
|
|
|
return _solarTerm;
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSString *) getGanZhiNameForDate:(LibLunarContext *)lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar not be null");
|
|
|
|
return [NSString stringWithFormat:@"%@%@",
|
|
[self ganArray][lunar->_gan.year],
|
|
[self zhiArray][lunar->_zhi.year]];
|
|
}
|
|
|
|
- (NSString *) getGanZhiYearNameForDate:(LibLunarContext *)lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar not be null");
|
|
|
|
return [NSString stringWithFormat:@"%@%@%@",
|
|
[self ganArray][lunar->_gan.year],
|
|
[self zhiArray][lunar->_zhi.year],
|
|
YEAR_STR];
|
|
}
|
|
|
|
- (NSString *) getShengXiaoNameForDate:(LibLunarContext *)lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar should not null");
|
|
return [self zodiacArray][lunar->_zhi.year];
|
|
}
|
|
|
|
- (NSString *) getLunarMonthForDate: (LibLunarContext *) lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar should not null");
|
|
|
|
NSString *monthStr = [self monthArray][lunar->_lunar.month - 1];
|
|
if ([self isLeapMonthForDate:lunar]) {
|
|
return [NSString stringWithFormat:@"%@%@",
|
|
LEAP_STR,
|
|
monthStr];
|
|
} else
|
|
return monthStr;
|
|
}
|
|
|
|
- (NSString *) getDayNameForDate: (LibLunarContext *) lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar should not null");
|
|
return [self dayArray][lunar->_lunar.day - 1];
|
|
}
|
|
|
|
- (NSString *) getFullLunarStringForDate: (LibLunarContext *) lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar should not null");
|
|
|
|
return [NSString stringWithFormat:@"%@%@%@%@", [self getGanZhiNameForDate:lunar],
|
|
YEAR_STR, [self getLunarMonthForDate:lunar],
|
|
[self getDayNameForDate:lunar] ];
|
|
|
|
}
|
|
|
|
- (NSString *) getLeapString
|
|
{
|
|
return LEAP_STR;
|
|
}
|
|
|
|
- (BOOL) isLeapMonthForDate: (LibLunarContext *) lunar
|
|
{
|
|
NSAssert(lunar != NULL, @"lunar should not null");
|
|
return lunar->_lunar.leap == 1;
|
|
}
|
|
|
|
@end
|