]> err.no Git - scalable-opengroupware.org/blob - SoObjects/SOGo/SOGoDateFormatter.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1252 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / SoObjects / SOGo / SOGoDateFormatter.m
1 /*
2   Copyright (C) 2004 SKYRIX Software AG
3
4   This file is part of OpenGroupware.org.
5
6   OGo is free software; you can redistribute it and/or modify it under
7   the terms of the GNU Lesser General Public License as published by the
8   Free Software Foundation; either version 2, or (at your option) any
9   later version.
10
11   OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12   WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14   License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with OGo; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21
22 #import <Foundation/NSDictionary.h>
23 #import <Foundation/NSCalendarDate.h>
24 #import <Foundation/NSUserDefaults.h>
25
26 #import "SOGoDateFormatter.h"
27
28 @implementation SOGoDateFormatter
29
30 - (id) init
31 {
32   if ((self = [super init]))
33     {
34       locale = nil;
35 //       locale = [_locale retain];
36       
37 //       if ([[locale objectForKey:@"NSLocaleCode"] isEqualToString: @"fr"])
38 //      shortDateFormat = SOGoDateDMYFormat;
39 //       else
40 //      shortDateFormat = SOGoDateISOFormat;
41       shortDateFormat = nil;
42       longDateFormat = nil;
43       timeFormat = nil;
44     }
45
46   return self;
47 }
48
49 - (void) dealloc
50 {
51   [longDateFormat release];
52   [shortDateFormat release];
53   [timeFormat release];
54   [locale release];
55   [super dealloc];
56 }
57
58 /* accessors */
59
60 - (void) setLocale: (NSDictionary *) newLocale
61 {
62   ASSIGN (locale, newLocale);
63   ASSIGN (shortDateFormat, [locale objectForKey: NSShortDateFormatString]);
64   ASSIGN (longDateFormat, [locale objectForKey: NSDateFormatString]);
65   ASSIGN (timeFormat, [locale objectForKey: NSTimeFormatString]);
66 }
67
68 - (void) setShortDateFormat: (NSString *) newFormat
69 {
70   ASSIGN (shortDateFormat, newFormat);
71 }
72
73 - (void) setLongDateFormat: (NSString *) newFormat
74 {
75   ASSIGN (longDateFormat, newFormat);
76 }
77
78 - (void) setTimeFormat: (NSString *) newFormat
79 {
80   ASSIGN (timeFormat, newFormat);
81 }
82
83 // - (void) setFullWeekdayNameAndDetails
84 // {
85 //   auxFormatAction = formatAction;
86 //   formatAction = @selector(fullWeekdayNameAndDetailsForDate:);
87 // }
88
89 /* operation */
90
91 - (NSString *) _date: (NSCalendarDate *) date
92           withFormat: (NSString *) format
93 {
94   NSString *formattedDate;
95
96   if (format && locale)
97     formattedDate
98       = [date descriptionWithCalendarFormat: format locale: locale];
99   else
100     formattedDate = nil;
101
102   return formattedDate;
103 }
104
105 - (NSString *) shortFormattedDate: (NSCalendarDate *) date
106 {
107   return [self _date: date withFormat: shortDateFormat];
108 }
109
110 - (NSString *) formattedDate: (NSCalendarDate *) date
111 {
112   return [self _date: date withFormat: longDateFormat];
113 }
114
115 - (NSString *) formattedTime: (NSCalendarDate *) date
116 {
117   return [self _date: date withFormat: timeFormat];
118 }
119
120 - (NSString *) formattedDateAndTime: (NSCalendarDate *) date
121 {
122   NSString *format;
123
124   format = [NSString stringWithFormat: @"%@ %@ %%Z",
125                      longDateFormat, timeFormat];
126
127   return [self _date: date withFormat: format];
128 }
129
130 - (NSString *) stringForObjectValue: (id) object
131 {
132   NSString *formattedString;
133
134   if ([object isKindOfClass: [NSCalendarDate class]])
135     formattedString = [self formattedDateAndTime: object];
136   else
137     formattedString = nil;
138
139   return formattedString;
140 }
141
142 // /* Helpers */
143
144 // - (NSString *)shortDayOfWeek:(int)_day {
145 //   return [[locale objectForKey:@"NSShortWeekDayNameArray"]
146 //         objectAtIndex:_day];
147 // }
148
149 // - (NSString *)fullDayOfWeek:(int)_day {
150 //   return [[locale objectForKey:@"NSWeekDayNameArray"]
151 //         objectAtIndex:_day];
152 // }
153
154 // - (NSString *)shortMonthOfYear:(int)_month {
155 //   return [[locale objectForKey:@"NSShortMonthNameArray"]
156 //         objectAtIndex:_month - 1];
157 // }
158
159 // - (NSString *)fullMonthOfYear:(int)_month {
160 //   return [[locale objectForKey:@"NSMonthNameArray"]
161 //         objectAtIndex:_month - 1];
162 // }
163
164
165 /* Private API */
166
167 // - (NSString *) fullWeekdayNameAndDetailsForDate: (NSCalendarDate *) _date
168 // {
169 //   NSMutableString *desc;
170
171 //   if (_date)
172 //     {  
173 //       desc = [NSMutableString stringWithCapacity:24];
174 //       [desc appendString:[self fullDayOfWeek:[_date dayOfWeek]]];
175 //       [desc appendString:@", "];
176 //       [desc appendString:[self performSelector:auxFormatAction
177 //                            withObject:_date]];
178 //       [desc appendString:@" "];
179 //       [desc appendFormat:@"%02d:%02d ", [_date hourOfDay], [_date minuteOfHour]];
180 //       [desc appendString:[[_date timeZone] abbreviation]];
181 //     }
182 //   else
183 //     desc = nil;
184
185 //   return desc;
186 // }
187
188 // - (NSString *) _separatorForFormat: (unsigned int) format
189 // {
190 //   NSString *separator;
191
192 //   switch (format & (3))
193 //     {
194 //     case SOGoDateDotFormat:
195 //       separator = @".";
196 //       break;
197 //     case SOGoDateDashFormat:
198 //       separator = @".";
199 //       break;
200 //     default:
201 //       separator = @"/";
202 //     }
203
204 //   return separator;
205 // }
206
207 // - (NSString *) _dateFormatForDate: (NSCalendarDate *) date
208 //                     withFormat: (unsigned int) format
209 //                   andSeparator: (NSString *) separator
210 // {
211 //   NSString *day, *month, *year;
212 //   NSString *formattedDate;
213
214 //   day = [NSString stringWithFormat: @"%.2d", [date dayOfMonth]];
215 //   month = [NSString stringWithFormat: @"%.2d", [date monthOfYear]];
216 //   if (format & SOGoDateTwoDigitsYearFormat)
217 //     year = [NSString stringWithFormat: @"%.2d", [date yearOfCommonEra] % 100];
218 //   else
219 //     year = [NSString stringWithFormat: @"%.4d", [date yearOfCommonEra]];
220
221 //   if (format & SOGoDateDMYFormat)
222 //     formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
223 //                            day, separator, month, separator, year];
224 //   else if (format & SOGoDateMDYFormat)
225 //     formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
226 //                            month, separator, day, separator, year];
227 //   else
228 //     formattedDate = [NSString stringWithFormat: @"%@%@%@%@%@",
229 //                            year, separator, month, separator, day];
230
231 //   return formattedDate;
232 // }
233
234 // - (NSString *) date: (NSCalendarDate *) date
235 //       withFormat: (unsigned int) format
236 // {
237 //   NSString *separator;
238
239 //   separator = [self _separatorForFormat: format];
240   
241 //   return [self _dateFormatForDate: date
242 //             withFormat: format
243 //             andSeparator: separator];
244 // }
245
246 // - (NSString *) date: (NSCalendarDate *) date
247 //        withNSFormat: (NSNumber *) format
248 // {
249 //   return [self date: date withFormat: [format unsignedIntValue]];
250 // }
251
252 @end /* SOGoDateFormatter */