date_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package excelize
  2. import (
  3. "fmt"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. type dateTest struct {
  9. ExcelValue float64
  10. GoValue time.Time
  11. }
  12. var trueExpectedDateList = []dateTest{
  13. {0.0000000000000000, time.Date(1899, time.December, 30, 0, 0, 0, 0, time.UTC)},
  14. {25569.000000000000, time.Unix(0, 0).UTC()},
  15. // Expected values extracted from real xlsx file
  16. {1.0000000000000000, time.Date(1900, time.January, 1, 0, 0, 0, 0, time.UTC)},
  17. {1.0000115740740740, time.Date(1900, time.January, 1, 0, 0, 1, 0, time.UTC)},
  18. {1.0006944444444446, time.Date(1900, time.January, 1, 0, 1, 0, 0, time.UTC)},
  19. {1.0416666666666667, time.Date(1900, time.January, 1, 1, 0, 0, 0, time.UTC)},
  20. {2.0000000000000000, time.Date(1900, time.January, 2, 0, 0, 0, 0, time.UTC)},
  21. {43269.000000000000, time.Date(2018, time.June, 18, 0, 0, 0, 0, time.UTC)},
  22. {43542.611111111109, time.Date(2019, time.March, 18, 14, 40, 0, 0, time.UTC)},
  23. {401769.00000000000, time.Date(3000, time.January, 1, 0, 0, 0, 0, time.UTC)},
  24. }
  25. func TestTimeToExcelTime(t *testing.T) {
  26. for i, test := range trueExpectedDateList {
  27. t.Run(fmt.Sprintf("TestData%d", i+1), func(t *testing.T) {
  28. assert.Equalf(t, test.ExcelValue, timeToExcelTime(test.GoValue),
  29. "Time: %s", test.GoValue.String())
  30. })
  31. }
  32. }
  33. func TestTimeToExcelTime_Timezone(t *testing.T) {
  34. msk, err := time.LoadLocation("Europe/Moscow")
  35. if !assert.NoError(t, err) {
  36. t.FailNow()
  37. }
  38. for i, test := range trueExpectedDateList {
  39. t.Run(fmt.Sprintf("TestData%d", i+1), func(t *testing.T) {
  40. assert.Panics(t, func() {
  41. timeToExcelTime(test.GoValue.In(msk))
  42. }, "Time: %s", test.GoValue.String())
  43. })
  44. }
  45. }
  46. func TestTimeFromExcelTime(t *testing.T) {
  47. trueExpectedInputList := []dateTest{
  48. {0.0, time.Date(1899, 12, 30, 0, 0, 0, 0, time.UTC)},
  49. {60.0, time.Date(1900, 2, 28, 0, 0, 0, 0, time.UTC)},
  50. {61.0, time.Date(1900, 3, 1, 0, 0, 0, 0, time.UTC)},
  51. {41275.0, time.Date(2013, 1, 1, 0, 0, 0, 0, time.UTC)},
  52. {401769.0, time.Date(3000, 1, 1, 0, 0, 0, 0, time.UTC)},
  53. }
  54. for i, test := range trueExpectedInputList {
  55. t.Run(fmt.Sprintf("TestData%d", i+1), func(t *testing.T) {
  56. assert.Equal(t, test.GoValue, timeFromExcelTime(test.ExcelValue, false))
  57. })
  58. }
  59. }
  60. func TestTimeFromExcelTime_1904(t *testing.T) {
  61. shiftJulianToNoon(1, -0.6)
  62. timeFromExcelTime(61, true)
  63. timeFromExcelTime(62, true)
  64. }