phpエディタXinyiが本日ご紹介するのは、Go言語における「Go時間変換アルゴリズムが正しく変換されない」という問題です。 Go 言語では時間の変換は一般的な操作ですが、場合によっては時間の変換結果が間違っている場合があります。この記事では、この問題の原因を詳しく説明し、開発者が Go 言語を使用して時刻を変換する際のエラーを回避するのに役立つ解決策を提供します。
私は、指定された時間形式の文字列を 12 時間形式から 24 時間形式に変換する関数を構築するというハッカーランクの課題に遭遇しました。
以下のコードを使用してこれを行うことができましたが、お気づきのとおり、午後 9 時に特別なケースが発生します。 09 で始まる時間を入力すると (それが唯一の問題です)、09 が 12 に変換されます。したがって、この問題を処理するために特定のケースを作成する必要があり、それはうまくいきましたが、なぜそれが起こったのかを理解したいと思いました。何が問題か知っていますか?
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")) }
文字列から整数への変換中にエラーが見つかった場合、値 >7
では変換が失敗することがわかります
これは、塩基として 0 を渡し、文字列の最初の文字から塩基を推測するように parseint
に指示するために発生します。先頭の '0'
は 8 進数を意味するため、7 より大きい数値は無効になります。対照的に、10 を渡す場合は特別な処理は必要ありません。
以上が時間変換アルゴリズムが正しく変換されないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。