。解析时间,我正在与一些数据来自多个来源的工作,这些来源之一是贤者ERP系统的格式HHMMSS00
我想在Sage中引用两个文件,特别是审计日期和审计时间(AUDTDATE
和AUDTTIME
)。
我需要解析这个并将其存储为在Microsoft SQL Server数据库的DATETIME。
目前,我只是试图找出解析是最好的方法。
的数据可能看起来像下面是一个例子:
+----------+----------+
| AUDTDATE | AUDTTIME |
+----------+----------+
| 20170228 | 5013756 |
+----------+----------+
AUDTDATE
是YYYYMMDD格式和AUDTTIME
是HHMMSS00。
所以,我想下面的测试:
func main() {
value := "20170228 5013756"
layout := "20060102 15040500"
t, _ := time.Parse(layout, value)
fmt.Println(t)
}
这是不行的,它只是返回0001-01-01 00:00:00 +0000 UTC
运行时。
如果我改变的时候这个050137
和布局150405
那么这工作得很好:
func main() {
value := "20170228 050137"
layout := "20060102 150405"
t, _ := time.Parse(layout, value)
fmt.Println(t)
}
一,我能想到的解决这个问题的方法是从最终剥离毫秒关闭,然后检查长度并在需要时添加一个零到开头。
这似乎是一个非常丑陋的解决方案,并会涉及到做这样的事情:
func main() {
date := "20170228"
timeString := "5013756"
value := date + prepareTime(timeString)
layout := "20060102150405"
t, _ := time.Parse(layout, value)
fmt.Println(t)
}
func prepareTime(time string) string {
if len(time) == 7 {
time = "0" + time
}
return time[:6]
}
有没有办法做到这一点,而无需通过上面去?也许本机与时间包?
这看起来像一个更好的解决方案。 'fmt.Sprintf(“%s%08s”,date,timeString)'''''''''''''''''''''''''''您介意再多加一点解释 - 我只是想更多地理解'%s%08s'。我假定'%s'输出日期,'%08s'输出时间,因为它是以前导零长度最多8个字符传入的。那是对的吗? – James
这是正确的。我已经更新了答案,以包含更多的解释。如前所述,这在这里很有用,因为它会导致正确的时间长度,即使需要多个“0”。 '%s'和'%08s'都表示这些值是字符串,'%08s'表示预先添加了一个最多包含8个零的字符串。在这个特殊的例子中,'%v%08v''也可以使用,因为'%v'表示使用参数的默认值。 '%v'可以用于任何结构体,但是当你可以''s''的时候更加具体。 – Grokify
感谢您的详细解释!很有用。我对Go很新,这非常有帮助。 – James