Added more code to NSDateFormatter.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@31929 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Stefan Bidigaray 2011-01-23 15:03:31 +00:00
parent 76a29d3b14
commit c38f0427f7
2 changed files with 202 additions and 5 deletions

View file

@ -1,3 +1,7 @@
2011-01-22 Stefan Bidigaray <stefanbidi@gmail.com>
* Source/NSDateFormatter.m: Implemented a few more methods.
2011-01-22 Stefan Bidigaray <stefanbidi@gmail.com> 2011-01-22 Stefan Bidigaray <stefanbidi@gmail.com>
* configure: * configure:

View file

@ -37,7 +37,9 @@
#import "Foundation/NSDateFormatter.h" #import "Foundation/NSDateFormatter.h"
#import "Foundation/NSCoder.h" #import "Foundation/NSCoder.h"
#if defined(HAVE_UNICODE_UDAT_H)
#include <unicode/udat.h> #include <unicode/udat.h>
#endif
@ -73,6 +75,11 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
- (id) init - (id) init
{ {
int length;
unichar buffer[BUFFER_SIZE];
unichar *value = buffer;
NSInteger err;
self = [super init]; self = [super init];
if (self == nil) if (self == nil)
return nil; return nil;
@ -81,6 +88,25 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
_locale = [NSLocale currentLocale]; _locale = [NSLocale currentLocale];
_tz = [NSTimeZone defaultTimeZone]; _tz = [NSTimeZone defaultTimeZone];
/* According to Apple docs, default behavior is NSDateFormatterBehavior10_4 on
10.5 and later. Yeah, go figure. */
#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST) && GS_USE_ICU == 1
err = U_ZERO_ERROR;
length =
udat_toPattern (_formatter, 0, value, BUFFER_SIZE, &err);
if (length > BUFFER_SIZE)
{
value = NSZoneMalloc ([self zone], sizeof(unichar) * length);
udat_toPattern (_formatter, 0, value, length, &err);
}
_dateFormat = [NSString stringWithCharacters: value length: length];
if (length > BUFFER_SIZE)
NSZoneFree ([self zone], value);
#endif
[self _resetUDateFormat]; [self _resetUDateFormat];
return self; return self;
@ -113,6 +139,8 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
- (void) dealloc - (void) dealloc
{ {
RELEASE(_dateFormat); RELEASE(_dateFormat);
RELEASE(_locale);
RELEASE(_tz);
[super dealloc]; [super dealloc];
} }
@ -344,9 +372,10 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
udat_applyPattern (_formatter, 0, pattern, patternLength); udat_applyPattern (_formatter, 0, pattern, patternLength);
NSZoneFree ([self zone], pattern); NSZoneFree ([self zone], pattern);
#else
return;
#endif #endif
if (_dateFormat)
RELEASE(_dateFormat);
_dateFormat = RETAIN(string);
} }
- (NSDateFormatterStyle) dateStyle - (NSDateFormatterStyle) dateStyle
@ -425,12 +454,25 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
- (NSDate *) twoDigitStartDate - (NSDate *) twoDigitStartDate
{ {
#if GS_USE_ICU == 1
UErrorCode err = U_ZERO_ERROR;
return [NSDate dateWithTimeIntervalSince1970:
(udat_get2DigitYearStart (_formatter, &err) / 1000.0)];
#else
return nil; return nil;
#endif
} }
- (void) setTwoDigitStartDate: (NSDate *) date - (void) setTwoDigitStartDate: (NSDate *) date
{ {
#if GS_USE_ICU == 1
UErrorCode err = U_ZERO_ERROR;
udat_set2DigitYearStart (_formatter,
([date timeIntervalSince1970] * 1000.0),
&err);
#else
return; return;
#endif
} }
@ -456,52 +498,92 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
- (NSArray *) weekdaySymbols - (NSArray *) weekdaySymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_WEEKDAYS];
#else
return nil; return nil;
#endif
} }
- (void) setWeekdaySymbols: () array - (void) setWeekdaySymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_WEEKDAYS];
#else
return; return;
#endif
} }
- (NSArray *) shortWeekdaySymbols - (NSArray *) shortWeekdaySymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_SHORT_WEEKDAYS];
#else
return nil; return nil;
#endif
} }
- (void) setShortWeekdaySymbols: (NSArray *) array - (void) setShortWeekdaySymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _getSymbols: UDAT_SHORT_WEEKDAYS];
#else
return; return;
#endif
} }
- (NSArray *) monthSymbols - (NSArray *) monthSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_MONTHS];
#else
return nil; return nil;
#endif
} }
- (void) setMonthSymbols: (NSArray *) array - (void) setMonthSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _getSymbols: UDAT_MONTHS];
#else
return; return;
#endif
} }
- (NSArray *) shortMonthSymbols - (NSArray *) shortMonthSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_SHORT_MONTHS];
#else
return nil; return nil;
#endif
} }
- (void) setShortMonthSymbols: (NSArray *) array - (void) setShortMonthSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _getSymbols: UDAT_SHORT_MONTHS];
#else
return; return;
#endif
} }
- (NSArray *) eraSymbols - (NSArray *) eraSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_ERAS];
#else
return nil; return nil;
#endif
} }
- (void) setEraSymbols: (NSArray *) array - (void) setEraSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_ERAS];
#else
return; return;
#endif
} }
- (NSDate *) gregorianStartDate - (NSDate *) gregorianStartDate
@ -516,133 +598,237 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
- (NSArray *) longEraSymbols - (NSArray *) longEraSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_ERA_NAMES];
#else
return nil; return nil;
#endif
} }
- (void) setLongEraSymbols: (NSArray *) array - (void) setLongEraSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_ERA_NAMES];
#else
return; return;
#endif
} }
- (NSArray *) quarterSymbols - (NSArray *) quarterSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_QUARTERS];
#else
return nil; return nil;
#endif
} }
- (void) setQuarterSymbols: (NSArray *) array - (void) setQuarterSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_QUARTERS];
#else
return; return;
#endif
} }
- (NSArray *) shortQuarterSymbols - (NSArray *) shortQuarterSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_SHORT_QUARTERS];
#else
return nil; return nil;
#endif
} }
- (void) setShortQuarterSymbols: (NSArray *) array - (void) setShortQuarterSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_SHORT_QUARTERS];
#else
return; return;
#endif
} }
- (NSArray *) standaloneQuarterSymbols - (NSArray *) standaloneQuarterSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_QUARTERS];
#else
return nil; return nil;
#endif
} }
- (void) setStandaloneQuarterSymbols: (NSArray *) array - (void) setStandaloneQuarterSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_QUARTERS];
#else
return; return;
#endif
} }
- (NSArray *) shortStandaloneQuarterSymbols - (NSArray *) shortStandaloneQuarterSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_SHORT_QUARTERS];
#else
return nil; return nil;
#endif
} }
- (void) setShortStandaloneQuarterSymbols: (NSArray *) array - (void) setShortStandaloneQuarterSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_SHORT_QUARTERS];
#else
return; return;
#endif
} }
- (NSArray *) shortStandaloneMonthSymbols - (NSArray *) shortStandaloneMonthSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_SHORT_MONTHS];
#else
return nil; return nil;
#endif
} }
- (void) setShortStandaloneMonthSymbols: (NSArray *) array - (void) setShortStandaloneMonthSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_SHORT_MONTHS];
#else
return; return;
#endif
} }
- (NSArray *) standaloneMonthSymbols - (NSArray *) standaloneMonthSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_MONTHS];
#else
return nil; return nil;
#endif
} }
- (void) setStandaloneMonthSymbols: (NSArray *) array - (void) setStandaloneMonthSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_MONTHS];
#else
return; return;
#endif
} }
- (NSArray *) veryShortMonthSymbols - (NSArray *) veryShortMonthSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_NARROW_MONTHS];
#else
return nil; return nil;
#endif
} }
- (void) setVeryShortMonthSymbols: (NSArray *) array - (void) setVeryShortMonthSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_NARROW_MONTHS];
#else
return; return;
#endif
} }
- (NSArray *) veryShortStandaloneMonthSymbols - (NSArray *) veryShortStandaloneMonthSymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_NARROW_MONTHS];
#else
return nil; return nil;
#endif
} }
- (void) setVeryShortStandaloneMonthSymbols: (NSArray *) array - (void) setVeryShortStandaloneMonthSymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_NARROW_MONTHS];
#else
return; return;
#endif
} }
- (NSArray *) shortStandaloneWeekdaySymbols - (NSArray *) shortStandaloneWeekdaySymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_SHORT_WEEKDAYS];
#else
return nil; return nil;
#endif
} }
- (void) setShortStandaloneWeekdaySymbols: (NSArray *) array - (void) setShortStandaloneWeekdaySymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_SHORT_WEEKDAYS];
#else
return; return;
#endif
} }
- (NSArray *) standaloneWeekdaySymbols - (NSArray *) standaloneWeekdaySymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_WEEKDAYS];
#else
return nil; return nil;
#endif
} }
- (void) setStandaloneWeekdaySymbols: (NSArray *) array - (void) setStandaloneWeekdaySymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_WEEKDAYS];
#else
return; return;
#endif
} }
- (NSArray *) veryShortWeekdaySymbols - (NSArray *) veryShortWeekdaySymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_SHORT_WEEKDAYS];
#else
return nil; return nil;
#endif
} }
- (void) setVeryShortWeekdaySymbols: (NSArray *) array - (void) setVeryShortWeekdaySymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_SHORT_WEEKDAYS];
#else
return; return;
#endif
} }
- (NSArray *) veryShortStandaloneWeekdaySymbols - (NSArray *) veryShortStandaloneWeekdaySymbols
{ {
#if GS_USE_ICU == 1
return [self _getSymbols: UDAT_STANDALONE_NARROW_WEEKDAYS];
#else
return nil; return nil;
#endif
} }
- (void) setVeryShortStandaloneWeekdaySymbols: (NSArray *) array - (void) setVeryShortStandaloneWeekdaySymbols: (NSArray *) array
{ {
#if GS_USE_ICU == 1
[self _setSymbols: array : UDAT_STANDALONE_NARROW_WEEKDAYS];
#else
return; return;
#endif
} }
+ (NSString *) localizedStringFromDate: (NSDate *) date + (NSString *) localizedStringFromDate: (NSDate *) date
@ -665,7 +851,14 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
options: (NSUInteger) opts options: (NSUInteger) opts
locale: (NSLocale *) locale locale: (NSLocale *) locale
{ {
return nil; NSString *result;
NSDateFormatter *fmt = [[self alloc] init];
[fmt setLocale: locale];
result = [fmt dateFormat];
RELEASE(fmt);
return result;
} }
- (BOOL) doesRelativeDateFormatting - (BOOL) doesRelativeDateFormatting
@ -773,7 +966,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0;
++idx; ++idx;
} }
return [NSArray arrayWithArray: mArray];; return [NSArray arrayWithArray: mArray];
#else #else
return nil; return nil;
#endif #endif