Heim >Backend-Entwicklung >Golang >Der Go-Stunden-Umrechnungsalgorithmus konvertiert nicht korrekt
Was der PHP-Editor Xinyi Ihnen heute vorstellen wird, ist ein Problem in der Go-Sprache, nämlich „Der Go-Stundenkonvertierungsalgorithmus wird nicht korrekt konvertiert“. In der Go-Sprache ist die Zeitumrechnung ein üblicher Vorgang, aber in einigen Fällen kann das Ergebnis der Stundenumrechnung falsch sein. In diesem Artikel wird die Ursache dieses Problems ausführlich erläutert und Lösungen bereitgestellt, die Entwicklern helfen, Fehler bei der Verwendung der Go-Sprache zur Zeitkonvertierung zu vermeiden.
Ich bin auf eine Hackerrank-Challenge gestoßen, bei der ich eine Funktion erstellen sollte, die einen String in einem bestimmten Zeitformat vom 12-Stunden-Format in das 24-Stunden-Format konvertiert.
Ich habe dies mit dem folgenden Code geschafft, aber wie Sie bemerkt haben, gibt es um 21 Uhr einen Sonderfall. Immer wenn ich eine Stunde eingebe, die mit 09 beginnt (das ist das einzig Verdammte), wird 09 in 12 umgewandelt. Also musste ich einen speziellen Fall erstellen, um dieses Problem zu lösen, was funktionierte, aber ich wollte verstehen, warum es passiert ist. Wissen Sie, was das Problem ist?
package main import ( "fmt" "strconv" "strings" ) type Conversion struct { conversion string } func timeConversion(s string) string { var conversion Conversion firstValue := fmt.Sprintf("%s%s", string(s[0]), string(s[1])) secondValue := fmt.Sprintf("%s%s", string(s[3]), string(s[4])) firstValueNumber, _ := strconv.ParseInt(firstValue, 0, 16) fmt.Print() if strings.Contains(s, "A") { if firstValue == "12" { conversion.conversion = fmt.Sprintf("%s:%s:%s%s", "00", secondValue, string(s[len(s)-4]), string(s[len(s)-3])) } else { conversion.conversion = fmt.Sprintf("%s:%s:%s%s", firstValue, secondValue, string(s[len(s)-4]), string(s[len(s)-3])) } } else if strings.Contains(s, "P") { if firstValue == "12" { conversion.conversion = fmt.Sprintf("%s:%s:%s%s", "12", secondValue, string(s[len(s)-4]), string(s[len(s)-3])) } else if firstValue == "09" { conversion.conversion = fmt.Sprintf("%s:%s:%s%s", "21", secondValue, string(s[len(s)-4]), string(s[len(s)-3])) } else { conversion.conversion = fmt.Sprintf("%d:%s:%s%s", firstValueNumber+12, secondValue, string(s[len(s)-4]), string(s[len(s)-3])) } } return conversion.conversion } func main() { fmt.Print(timeConversion("09:08:23PM")) }
Wenn Sie bei der Konvertierung von String in Int einen Fehler finden, werden Sie feststellen, dass die Konvertierung für den Wert >7
fehlschlägt
firstValueNumber, err := strconv.ParseInt(firstValue, 0, 64) if err != nil { fmt.Printf("%s", err.Error()) } // "08" results in invalid syntaxfirstValueNumber being printed
Dies geschieht, weil Sie 0 als Basis übergeben und parseint
从字符串的第一个字符推断基数。前导 '0'
mitteilen, dass es sich um eine Oktalbasis handelt, sodass Zahlen größer als 7 nicht gültig sind. Im Gegensatz dazu erfordert das Bestehen von 10 keine besondere Behandlung.
Das obige ist der detaillierte Inhalt vonDer Go-Stunden-Umrechnungsalgorithmus konvertiert nicht korrekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!