[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bugs-dist
Subject: [Bug 78717] Date.UTC and Date.setUTC* produce incorrect time
From: Pascal "Létourneau" <pletourn () globetrotter ! net>
Date: 2004-09-30 15:37:03
Message-ID: 20040930153703.15981.qmail () ktown ! kde ! org
[Download RAW message or body]
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
http://bugs.kde.org/show_bug.cgi?id=78717
pletourn globetrotter net changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
------- Additional Comments From pletourn globetrotter net 2004-09-30 17:37 -------
CVS commit by pletourn:
Fix new Date("01 Jan 2004 10:00")
Fix Date.setUTC*()
Fix Date.UTC()
CCMAIL:78717-done bugs kde org
M +23 -19 date_object.cpp 1.80.2.2
M +1 -1 date_object.h 1.22.6.1
--- kdelibs/kjs/date_object.h #1.22:1.22.6.1
@ -123,5 +123,5 @ namespace KJS {
double KRFCDate_parseDate(const UString &_date);
Value timeClip(const Value &t);
- int local_timeoffset();
+ Number makeTime(struct tm *t, int milli, bool utc);
} // namespace
--- kdelibs/kjs/date_object.cpp #1.80.2.1:1.80.2.2
@ -380,6 +380,5 @ Value DateProtoFuncImp::call(ExecState *
id == SetMinutes || id == SetHours || id == SetDate ||
id == SetMonth || id == SetFullYear ) {
- t->tm_isdst = -1; // reset DST
- result = Number(mktime(t) * 1000.0 + ms);
+ result = makeTime(t, ms, utc);
thisObj.setInternalValue(result);
}
@ -462,5 +461,5 @ Object DateObjectImp::construct(ExecStat
t.tm_isdst = -1;
int ms = (numArgs >= 7) ? args[6].toInt32(exec) : 0;
- value = Number(mktime(&t) * 1000.0 + ms);
+ value = makeTime(&t, ms, false);
}
@ -522,5 +521,5 @ Value DateObjectFuncImp::call(ExecState
t.tm_sec = (n >= 6) ? args[5].toInt32(exec) : 0;
int ms = (n >= 7) ? args[6].toInt32(exec) : 0;
- return Number(mktime(&t) * 1000.0 + ms);
+ return makeTime(&t, ms, true);
}
}
@ -594,17 +593,19 @ static const struct {
};
-int KJS::local_timeoffset()
+Number KJS::makeTime(struct tm *t, int ms, bool utc)
{
- static int local_offset = -1;
-
- if ( local_offset != -1 ) return local_offset;
-
- time_t local = time(0);
- struct tm* tm_local = gmtime(&local);
- local_offset = local-mktime(tm_local);
- if(tm_local->tm_isdst)
- local_offset += 3600;
+ int utcOffset;
+ if (utc) {
+ time_t zero = 0;
+ struct tm t3;
+ localtime_r(&zero, &t3);
+ utcOffset = t3.tm_gmtoff;
+ t->tm_isdst = t3.tm_isdst;
+ } else {
+ utcOffset = 0;
+ t->tm_isdst = -1;
+ }
- return local_offset;
+ return Number( ( mktime(t) + utcOffset ) * 1000.0 + ms );
}
@ -863,5 +864,5 @ double KJS::KRFCDate_parseDate(const USt
return invalidDate;
- if (!have_time && !have_tz) {
+ if (!have_tz) {
// fall back to midnight, local timezone
struct tm t;
@ -871,10 +872,13 @ double KJS::KRFCDate_parseDate(const USt
t.tm_year = year - 1900;
t.tm_isdst = -1;
+ if (have_time) {
+ t.tm_sec = second;
+ t.tm_min = minute;
+ t.tm_hour = hour;
+ }
+
return mktime(&t);
}
- if(!have_tz)
- offset = local_timeoffset();
- else
offset *= 60;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic