Ich arbeite mit einigen Daten aus mehreren Quellen und eine dieser Quellen ist ein Sage ERP-System.Parsing eine Zeit mit dem Format HHMMSS00
Ich versuche, zwei Dateien in Sage insbesondere ein Audit-Datum und Audit-Zeit (AUDTDATE
und AUDTTIME
) zu referenzieren.
Ich muss dies analysieren und es als DATETIME in einer Microsoft SQL Server-Datenbank speichern.
Momentan versuche ich nur herauszufinden, wie man das am besten parsen kann.
Ein Beispiel, wie die Daten unter aussehen könnte:
+----------+----------+
| AUDTDATE | AUDTTIME |
+----------+----------+
| 20170228 | 5013756 |
+----------+----------+
AUDTDATE
ist ein yyyymmdd Format und die AUDTTIME
ist HHMMSS00.
Also habe ich versucht, die unten als Test:
func main() {
value := "20170228 5013756"
layout := "20060102 15040500"
t, _ := time.Parse(layout, value)
fmt.Println(t)
}
Dies funktioniert nicht, es gibt nur 0001-01-01 00:00:00 +0000 UTC
bei der Ausführung.
Wenn ich die Zeit auf diese 050137
und das Layout 150405
ändern dann funktioniert das gut:
func main() {
value := "20170228 050137"
layout := "20060102 150405"
t, _ := time.Parse(layout, value)
fmt.Println(t)
}
Eine Möglichkeit, dass ich mir vorstellen kann damit umgehen ist die Millisekunden ab vom Ende abzustreifen und dann überprüfen Sie die Länge und fügen Sie eine Null an den Anfang, wenn es einen braucht.
Dies scheint eine ziemlich hässliche Lösung und würde etwas zu tun, wie diese beinhalten:
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]
}
Gibt es eine Möglichkeit, dies zu tun, ohne durch die oben? Vielleicht nativ mit dem Zeitpaket?
Dieses wie eine viel elegantere Lösung aussieht. 'fmt.Sprintf ("% s% 08s ", date, timeString)" Würde es Ihnen etwas ausmachen, dies ein wenig mehr zu erklären - ich versuche nur ein wenig mehr zu verstehen "% s% 08s" '. Ich gehe davon aus, dass "% s" das Datum ausgibt, wenn es übergeben wird, und "% 08s" gibt die Zeit aus, wenn es mit führenden Nullen mit bis zu 8 Zeichen Länge übergeben wird. Ist das korrekt? – James
Das ist richtig. Ich habe die Antwort aktualisiert, um mehr zu erklären. Wie bereits erwähnt, ist dies hier nützlich, da es zu der richtigen Zeitlänge führt, auch wenn mehr als eine "0" benötigt wird. Die "% s" und "% 08s" geben beide an, dass die Werte Zeichenfolgen sind, wobei "% 08s" angibt, dass eine Zeichenfolge mit bis zu 8 Nullen vorangestellt werden soll. In dieser speziellen Instanz kann "% v% 08v" auch verwendet werden, weil "% v" angibt, einen Standardwert des Arguments zu verwenden. '% v' kann für jede Struktur verwendet werden, aber es ist nett, genauer zu sein, wenn Sie können,'% s' hier. – Grokify
Danke für die ausführliche Erklärung! Sehr hilfreich. Ich bin ziemlich neu in Go und das ist sehr hilfreich. – James