Merge branch 'master' of github.com:280north/cappuccino

This commit is contained in:
Alexander Ljungberg
2010-12-31 15:24:09 -03:00
2 changed files with 27 additions and 10 deletions
+13 -5
View File
@@ -182,17 +182,25 @@ var CPDateReferenceDate = new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0));
return (self > anotherDate) ? self : anotherDate;
}
/*!
Returns timezone offset as a string in ±HHMM format
*/
+ (CPString)timezoneOffsetString:(int)timezoneOffset
{
var offset = -timezoneOffset,
positive = offset >= 0,
hours = positive ? FLOOR(offset / 60) : CEIL(offset / 60),
minutes = offset - hours * 60;
return [CPString stringWithFormat:@"%s%02d%02d", positive ? "+" : "-", ABS(hours), ABS(minutes)];
}
/*!
Returns the date as a string in the international format
YYYY-MM-DD HH:MM:SS ±HHMM.
*/
- (CPString)description
{
var positive = self.getTimezoneOffset() >= 0,
hours = FLOOR(self.getTimezoneOffset() / 60),
minutes = self.getTimezoneOffset() - hours * 60;
return [CPString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d %s%02d%02d", self.getFullYear(), self.getMonth()+1, self.getDate(), self.getHours(), self.getMinutes(), self.getSeconds(), positive ? "+" : "-", ABS(hours), ABS(minutes)];
return [CPString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d %s", self.getFullYear(), self.getMonth()+1, self.getDate(), self.getHours(), self.getMinutes(), self.getSeconds(), [CPDate timezoneOffsetString:self.getTimezoneOffset()]];
}
- (id)copy
+14 -5
View File
@@ -69,12 +69,13 @@
expectedDay = 13,
expectedHour = 23,
expectedMinute = 31,
offsetPositive = date.getTimezoneOffset() >= 0,
offsetHours = Math.floor(date.getTimezoneOffset() / 60),
offsetMinutes = date.getTimezoneOffset() - offsetHours * 60,
offset = -date.getTimezoneOffset(),
offsetPositive = offset >= 0,
offsetHours = offsetPositive ? Math.floor(offset / 60) : Math.ceil(offset / 60),
offsetMinutes = offset - offsetHours * 60,
expectedString;
expectedHour -= offsetHours;
expectedMinute -= offsetMinutes;
expectedHour += offsetHours;
expectedMinute += offsetMinutes;
if (expectedMinute < 0)
{
expectedMinute += 60;
@@ -102,6 +103,14 @@
expectedString = [CPString stringWithFormat:"2009-02-%02d %02d:%02d:30 -%02d%02d", expectedDay, expectedHour, expectedMinute, ABS(offsetHours), ABS(offsetMinutes)];
[self assert:expectedString equals: [date description]];
// Now test that timezone convertion algorithm in CPDate works correctly for
// different timezones
[self assert:"+0000" equals: [CPDate timezoneOffsetString:0]];
[self assert:"-0900" equals: [CPDate timezoneOffsetString:+540]];
[self assert:"+0300" equals: [CPDate timezoneOffsetString:-180]];
[self assert:"-0130" equals: [CPDate timezoneOffsetString:+90]];
[self assert:"+0130" equals: [CPDate timezoneOffsetString:-90]];
}
- (void)testCopy