Преглед на файлове

Do time/date calculations in UTC instead of local time (which is just dumb).

Geoffrey J. Teale преди 11 години
родител
ревизия
c1e2d64e66
променени са 2 файла, в които са добавени 18 реда и са изтрити 23 реда
  1. 3 8
      date.go
  2. 15 15
      date_test.go

+ 3 - 8
date.go

@@ -2,7 +2,6 @@ package xlsx
 
 import (
 	"math"
-	"runtime"
 	"time"
 )
 
@@ -45,7 +44,7 @@ func julianDateToGregorianTime(part1, part2 float64) time.Time {
 	julianDays, julianFraction = shiftJulianToNoon(julianDays, julianFraction)
 	day, month, year := doTheFliegelAndVanFlandernAlgorithm(int(julianDays))
 	hours, minutes, seconds, nanoseconds := fractionOfADay(julianFraction)
-	return time.Date(year, time.Month(month), day, hours, minutes, seconds, nanoseconds, time.Local)
+	return time.Date(year, time.Month(month), day, hours, minutes, seconds, nanoseconds, time.UTC)
 }
 
 // By this point generations of programmers have repeated the
@@ -88,14 +87,10 @@ func TimeFromExcelTime(excelTime float64, date1904 bool) time.Time {
 	}
 	var floatPart float64 = excelTime - float64(intPart)
 	var dayNanoSeconds float64 = 24 * 60 * 60 * 1000 * 1000 * 1000
-	var baselineDays int = 1
-	if runtime.GOOS == "windows" {
-		baselineDays = 0
-	}
 	if date1904 {
-		date = time.Date(1904, 1, 1, baselineDays, 0, 0, 0, time.Local)
+		date = time.Date(1904, 1, 1, 0, 0, 0, 0, time.UTC)
 	} else {
-		date = time.Date(1899, 12, 30, baselineDays, 0, 0, 0, time.Local)
+		date = time.Date(1899, 12, 30, 0, 0, 0, 0, time.UTC)
 	}
 	durationDays := time.Duration(intPart) * time.Hour * 24
 	durationPart := time.Duration(dayNanoSeconds * floatPart)

+ 15 - 15
date_test.go

@@ -25,47 +25,47 @@ func (d *DateSuite) TestFractionOfADay(c *C) {
 
 func (d *DateSuite) TestJulianDateToGregorianTime(c *C) {
 	c.Assert(julianDateToGregorianTime(2400000.5, 51544.0),
-		Equals, time.Date(2000, 1, 1, 0, 0, 0, 0, time.Local))
+		Equals, time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC))
 	c.Assert(julianDateToGregorianTime(2400000.5, 51544.5),
-		Equals, time.Date(2000, 1, 1, 12, 0, 0, 0, time.Local))
+		Equals, time.Date(2000, 1, 1, 12, 0, 0, 0, time.UTC))
 	c.Assert(julianDateToGregorianTime(2400000.5, 51544.245),
-		Equals, time.Date(2000, 1, 1, 6, 40, 0, 13578, time.Local))
+		Equals, time.Date(2000, 1, 1, 6, 40, 0, 13578, time.UTC))
 	c.Assert(julianDateToGregorianTime(2400000.5, 51544.1),
-		Equals, time.Date(2000, 1, 1, 3, 22, 59, 999992456, time.Local))
+		Equals, time.Date(2000, 1, 1, 3, 22, 59, 999992456, time.UTC))
 	c.Assert(julianDateToGregorianTime(2400000.5, 51544.75),
-		Equals, time.Date(2000, 1, 1, 18, 0, 0, 0, time.Local))
+		Equals, time.Date(2000, 1, 1, 18, 0, 0, 0, time.UTC))
 }
 
 func (d *DateSuite) TestTimeFromExcelTime(c *C) {
 	date := TimeFromExcelTime(0, false)
-	c.Assert(date, Equals, time.Date(1899, 12, 30, 0, 0, 0, 0, time.Local))
+	c.Assert(date, Equals, time.Date(1899, 12, 30, 0, 0, 0, 0, time.UTC))
 	date = TimeFromExcelTime(60, false)
-	c.Assert(date, Equals, time.Date(1900, 2, 28, 0, 0, 0, 0, time.Local))
+	c.Assert(date, Equals, time.Date(1900, 2, 28, 0, 0, 0, 0, time.UTC))
 	date = TimeFromExcelTime(61, false)
-	c.Assert(date, Equals, time.Date(1900, 3, 1, 0, 0, 0, 0, time.Local))
+	c.Assert(date, Equals, time.Date(1900, 3, 1, 0, 0, 0, 0, time.UTC))
 	date = TimeFromExcelTime(41275.0, false)
-	c.Assert(date, Equals, time.Date(2013, 1, 1, 0, 0, 0, 0, time.Local))
+	c.Assert(date, Equals, time.Date(2013, 1, 1, 0, 0, 0, 0, time.UTC))
 }
 
 func (d *DateSuite) TestTimeFromExcelTimeWithFractionalPart(c *C) {
 	date := TimeFromExcelTime(0.114583333333333, false)
-	c.Assert(date.Round(time.Second), Equals, time.Date(1899, 12, 30, 2, 45, 0, 0, time.Local))
+	c.Assert(date.Round(time.Second), Equals, time.Date(1899, 12, 30, 2, 45, 0, 0, time.UTC))
 
 	date = TimeFromExcelTime(60.1145833333333, false)
-	c.Assert(date.Round(time.Second), Equals, time.Date(1900, 2, 28, 2, 45, 0, 0, time.Local))
+	c.Assert(date.Round(time.Second), Equals, time.Date(1900, 2, 28, 2, 45, 0, 0, time.UTC))
 
 	date = TimeFromExcelTime(61.3986111111111, false)
-	c.Assert(date.Round(time.Second), Equals, time.Date(1900, 3, 1, 9, 34, 0, 0, time.Local))
+	c.Assert(date.Round(time.Second), Equals, time.Date(1900, 3, 1, 9, 34, 0, 0, time.UTC))
 
 	date = TimeFromExcelTime(37947.75, false)
-	c.Assert(date.Round(time.Second), Equals, time.Date(2003, 11, 22, 18, 0, 0, 0, time.Local))
+	c.Assert(date.Round(time.Second), Equals, time.Date(2003, 11, 22, 18, 0, 0, 0, time.UTC))
 
 	date = TimeFromExcelTime(41275.1145833333, false)
-	c.Assert(date.Round(time.Second), Equals, time.Date(2013, 1, 1, 2, 45, 0, 0, time.Local))
+	c.Assert(date.Round(time.Second), Equals, time.Date(2013, 1, 1, 2, 45, 0, 0, time.UTC))
 }
 
 func (d *DateSuite) TestTimeFromExcelTimeWith1904Offest(c *C) {
 	date1904Offset := TimeFromExcelTime(39813.0, true)
-	c.Assert(date1904Offset, Equals, time.Date(2013, 1, 1, 0, 0, 0, 0, time.Local))
+	c.Assert(date1904Offset, Equals, time.Date(2013, 1, 1, 0, 0, 0, 0, time.UTC))
 
 }