diff options
author | ice <lfq7413@gmail.com> | 2021-05-15 23:42:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-15 23:42:52 +0800 |
commit | c8c62c2d2a7da3f8e03ad081a9227bcb47f38c45 (patch) | |
tree | 6357daaeaa4377aebe3cdc38c53f9c231ddb6eca | |
parent | 37342f6d81b27adbcdc6cf6cf9ccdc68f92cdb46 (diff) |
* This closes #841, fix incorrect build number format in PR #839
-rw-r--r-- | styles.go | 23 | ||||
-rw-r--r-- | styles_test.go | 8 |
2 files changed, 22 insertions, 9 deletions
@@ -46,8 +46,8 @@ var builtInNumFmt = map[int]string{ 17: "mmm-yy", 18: "h:mm am/pm", 19: "h:mm:ss am/pm", - 20: "h:mm", - 21: "h:mm:ss", + 20: "hh:mm", + 21: "hh:mm:ss", 22: "m/d/yy hh:mm", 37: "#,##0 ;(#,##0)", 38: "#,##0 ;[red](#,##0)", @@ -1009,6 +1009,10 @@ func parseTime(v string, format string) string { } // It is the presence of the "am/pm" indicator that determines if this is // a 12 hour or 24 hours time format, not the number of 'h' characters. + var padding bool + if val.Hour() == 0 && !strings.Contains(format, "hh") && !strings.Contains(format, "HH") { + padding = true + } if is12HourTime(format) { goFmt = strings.Replace(goFmt, "hh", "3", 1) goFmt = strings.Replace(goFmt, "h", "3", 1) @@ -1016,15 +1020,12 @@ func parseTime(v string, format string) string { goFmt = strings.Replace(goFmt, "H", "3", 1) } else { goFmt = strings.Replace(goFmt, "hh", "15", 1) - if val.Hour() < 12 { - goFmt = strings.Replace(goFmt, "h", "3", 1) - } else { - goFmt = strings.Replace(goFmt, "h", "15", 1) - } goFmt = strings.Replace(goFmt, "HH", "15", 1) - if val.Hour() < 12 { + if 0 < val.Hour() && val.Hour() < 12 { + goFmt = strings.Replace(goFmt, "h", "3", 1) goFmt = strings.Replace(goFmt, "H", "3", 1) } else { + goFmt = strings.Replace(goFmt, "h", "15", 1) goFmt = strings.Replace(goFmt, "H", "15", 1) } } @@ -1046,7 +1047,11 @@ func parseTime(v string, format string) string { goFmt = strings.Replace(goFmt, "[3]", "3", 1) goFmt = strings.Replace(goFmt, "[15]", "15", 1) } - return val.Format(goFmt) + s := val.Format(goFmt) + if padding { + s = strings.Replace(s, "00:", "0:", 1) + } + return s } // is12HourTime checks whether an Excel time format string is a 12 hours form. diff --git a/styles_test.go b/styles_test.go index d3fde0c..e2eed1d 100644 --- a/styles_test.go +++ b/styles_test.go @@ -293,6 +293,14 @@ func TestParseTime(t *testing.T) { assert.Equal(t, "2019-03-04 05:05:42", parseTime("43528.2123", "YYYY-MM-DD hh:mm:ss")) assert.Equal(t, "2019-03-04 05:05:42", parseTime("43528.2123", "YYYY-MM-DD hh:mm:ss;YYYY-MM-DD hh:mm:ss")) assert.Equal(t, "3/4/2019 5:5:42", parseTime("43528.2123", "M/D/YYYY h:m:s")) + assert.Equal(t, "3/4/2019 0:5:42", parseTime("43528.003958333335", "m/d/yyyy h:m:s")) + assert.Equal(t, "3/4/2019 0:05:42", parseTime("43528.003958333335", "M/D/YYYY h:mm:s")) + assert.Equal(t, "0:05", parseTime("43528.003958333335", "h:mm")) + assert.Equal(t, "0:0", parseTime("6.9444444444444444E-5", "h:m")) + assert.Equal(t, "0:00", parseTime("6.9444444444444444E-5", "h:mm")) + assert.Equal(t, "0:0", parseTime("6.9444444444444444E-5", "h:m")) + assert.Equal(t, "12:1", parseTime("0.50070601851851848", "h:m")) + assert.Equal(t, "23:30", parseTime("0.97952546296296295", "h:m")) assert.Equal(t, "March", parseTime("43528", "mmmm")) assert.Equal(t, "Monday", parseTime("43528", "dddd")) } |