3137eec66d
Monotone-Revision: 1f7e270223f35974083eee7059e0a42cf720ad5e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-06-19T18:03:18 Monotone-Branch: ca.inverse.sogo
252 lines
6.4 KiB
Objective-C
252 lines
6.4 KiB
Objective-C
/*
|
|
Copyright (C) 2004 SKYRIX Software AG
|
|
|
|
This file is part of OpenGroupware.org.
|
|
|
|
OGo is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU Lesser General Public License as published by the
|
|
Free Software Foundation; either version 2, or (at your option) any
|
|
later version.
|
|
|
|
OGo 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 Lesser General Public
|
|
License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with OGo; see the file COPYING. If not, write to the
|
|
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
02111-1307, USA.
|
|
*/
|
|
|
|
#import <Foundation/NSCalendarDate.h>
|
|
#import <Foundation/NSUserDefaults.h>
|
|
|
|
#import "SOGoDateFormatter.h"
|
|
|
|
@implementation SOGoDateFormatter
|
|
|
|
- (id) init
|
|
{
|
|
if ((self = [super init]))
|
|
{
|
|
locale = nil;
|
|
// locale = [_locale retain];
|
|
|
|
// if ([[locale objectForKey:@"NSLocaleCode"] isEqualToString: @"fr"])
|
|
// shortDateFormat = SOGoDateDMYFormat;
|
|
// else
|
|
// shortDateFormat = SOGoDateISOFormat;
|
|
shortDateFormat = nil;
|
|
longDateFormat = nil;
|
|
timeFormat = nil;
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void) dealloc
|
|
{
|
|
[longDateFormat release];
|
|
[shortDateFormat release];
|
|
[timeFormat release];
|
|
[locale release];
|
|
[super dealloc];
|
|
}
|
|
|
|
/* accessors */
|
|
|
|
- (void) setLocale: (NSDictionary *) newLocale
|
|
{
|
|
ASSIGN (locale, newLocale);
|
|
ASSIGN (shortDateFormat, [locale objectForKey: NSShortDateFormatString]);
|
|
ASSIGN (longDateFormat, [locale objectForKey: NSDateFormatString]);
|
|
ASSIGN (timeFormat, [locale objectForKey: NSTimeFormatString]);
|
|
}
|
|
|
|
- (void) setShortDateFormat: (NSString *) newFormat
|
|
{
|
|
ASSIGN (shortDateFormat, newFormat);
|
|
}
|
|
|
|
- (void) setLongDateFormat: (NSString *) newFormat
|
|
{
|
|
ASSIGN (longDateFormat, newFormat);
|
|
}
|
|
|
|
- (void) setTimeFormat: (NSString *) newFormat
|
|
{
|
|
ASSIGN (timeFormat, newFormat);
|
|
}
|
|
|
|
// - (void) setFullWeekdayNameAndDetails
|
|
// {
|
|
// auxFormatAction = formatAction;
|
|
// formatAction = @selector(fullWeekdayNameAndDetailsForDate:);
|
|
// }
|
|
|
|
/* operation */
|
|
|
|
- (NSString *) _date: (NSCalendarDate *) date
|
|
withFormat: (NSString *) format
|
|
{
|
|
NSString *formattedDate;
|
|
|
|
if (format && locale)
|
|
formattedDate
|
|
= [date descriptionWithCalendarFormat: format locale: locale];
|
|
else
|
|
formattedDate = nil;
|
|
|
|
return formattedDate;
|
|
}
|
|
|
|
- (NSString *) shortFormattedDate: (NSCalendarDate *) date
|
|
{
|
|
return [self _date: date withFormat: shortDateFormat];
|
|
}
|
|
|
|
- (NSString *) formattedDate: (NSCalendarDate *) date
|
|
{
|
|
return [self _date: date withFormat: longDateFormat];
|
|
}
|
|
|
|
- (NSString *) formattedTime: (NSCalendarDate *) date
|
|
{
|
|
return [self _date: date withFormat: timeFormat];
|
|
}
|
|
|
|
- (NSString *) formattedDateAndTime: (NSCalendarDate *) date
|
|
{
|
|
NSString *format;
|
|
|
|
format = [NSString stringWithFormat: @"%@ %@ %%Z",
|
|
longDateFormat, timeFormat];
|
|
|
|
return [self _date: date withFormat: format];
|
|
}
|
|
|
|
- (NSString *) stringForObjectValue: (id) object
|
|
{
|
|
NSString *formattedString;
|
|
|
|
if ([object isKindOfClass: [NSCalendarDate class]])
|
|
formattedString = [self formattedDateAndTime: object];
|
|
else
|
|
formattedString = nil;
|
|
|
|
return formattedString;
|
|
}
|
|
|
|
// /* Helpers */
|
|
|
|
// - (NSString *)shortDayOfWeek:(int)_day {
|
|
// return [[locale objectForKey:@"NSShortWeekDayNameArray"]
|
|
// objectAtIndex:_day];
|
|
// }
|
|
|
|
// - (NSString *)fullDayOfWeek:(int)_day {
|
|
// return [[locale objectForKey:@"NSWeekDayNameArray"]
|
|
// objectAtIndex:_day];
|
|
// }
|
|
|
|
// - (NSString *)shortMonthOfYear:(int)_month {
|
|
// return [[locale objectForKey:@"NSShortMonthNameArray"]
|
|
// objectAtIndex:_month - 1];
|
|
// }
|
|
|
|
// - (NSString *)fullMonthOfYear:(int)_month {
|
|
// return [[locale objectForKey:@"NSMonthNameArray"]
|
|
// objectAtIndex:_month - 1];
|
|
// }
|
|
|
|
|
|
/* Private API */
|
|
|
|
// - (NSString *) fullWeekdayNameAndDetailsForDate: (NSCalendarDate *) _date
|
|
// {
|
|
// NSMutableString *desc;
|
|
|
|
// if (_date)
|
|
// {
|
|
// desc = [NSMutableString stringWithCapacity:24];
|
|
// [desc appendString:[self fullDayOfWeek:[_date dayOfWeek]]];
|
|
// [desc appendString:@", "];
|
|
// [desc appendString:[self performSelector:auxFormatAction
|
|
// withObject:_date]];
|
|
// [desc appendString:@" "];
|
|
// [desc appendFormat:@"%02d:%02d ", [_date hourOfDay], [_date minuteOfHour]];
|
|
// [desc appendString:[[_date timeZone] abbreviation]];
|
|
// }
|
|
// else
|
|
// desc = nil;
|
|
|
|
// return desc;
|
|
// }
|
|
|
|
// - (NSString *) _separatorForFormat: (unsigned int) format
|
|
// {
|
|
// NSString *separator;
|
|
|
|
// switch (format & (3))
|
|
// {
|
|
// case SOGoDateDotFormat:
|
|
// separator = @".";
|
|
// break;
|
|
// case SOGoDateDashFormat:
|
|
// separator = @".";
|
|
// break;
|
|
// default:
|
|
// separator = @"/";
|
|
// }
|
|
|
|
// return separator;
|
|
// }
|
|
|
|
// - (NSString *) _dateFormatForDate: (NSCalendarDate *) date
|
|
// withFormat: (unsigned int) format
|
|
// andSeparator: (NSString *) separator
|
|
// {
|
|
// NSString *day, *month, *year;
|
|
// NSString *formattedDate;
|
|
|
|
// day = [NSString stringWithFormat: @"%.2d", [date dayOfMonth]];
|
|
// month = [NSString stringWithFormat: @"%.2d", [date monthOfYear]];
|
|
// if (format & SOGoDateTwoDigitsYearFormat)
|
|
// year = [NSString stringWithFormat: @"%.2d", [date yearOfCommonEra] % 100];
|
|
// else
|
|
// year = [NSString stringWithFormat: @"%.4d", [date yearOfCommonEra]];
|
|
|
|
// if (format & SOGoDateDMYFormat)
|
|
// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
|
|
// day, separator, month, separator, year];
|
|
// else if (format & SOGoDateMDYFormat)
|
|
// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
|
|
// month, separator, day, separator, year];
|
|
// else
|
|
// formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
|
|
// year, separator, month, separator, day];
|
|
|
|
// return formattedDate;
|
|
// }
|
|
|
|
// - (NSString *) date: (NSCalendarDate *) date
|
|
// withFormat: (unsigned int) format
|
|
// {
|
|
// NSString *separator;
|
|
|
|
// separator = [self _separatorForFormat: format];
|
|
|
|
// return [self _dateFormatForDate: date
|
|
// withFormat: format
|
|
// andSeparator: separator];
|
|
// }
|
|
|
|
// - (NSString *) date: (NSCalendarDate *) date
|
|
// withNSFormat: (NSNumber *) format
|
|
// {
|
|
// return [self date: date withFormat: [format unsignedIntValue]];
|
|
// }
|
|
|
|
@end /* SOGoDateFormatter */
|