오늘 소개할 PHP 편집기 Xinyi는 Go 언어의 문제점, 즉 "Go hour 변환 알고리즘이 올바르게 변환되지 않습니다"라는 문제입니다. Go 언어에서는 시간 변환이 일반적인 작업이지만 경우에 따라 시간 변환 결과가 잘못된 경우가 있습니다. 이 기사에서는 이 문제의 원인을 자세히 설명하고 개발자가 시간 변환을 위해 Go 언어를 사용할 때 오류를 방지하는 데 도움이 되는 솔루션을 제공합니다.
주어진 시간 형식의 문자열을 12시간 형식에서 24시간 형식으로 변환하는 함수를 작성해야 하는 hackerrank 챌린지를 발견했습니다.
아래 코드를 사용하여 이 작업을 수행했지만 보시다시피 오후 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")) }
문자열을 int로 변환하는 동안 오류를 발견하면 값 >7
에 대한 변환이 실패함을 알 수 있습니다
이는 0을 기수로 전달하여 parseint
从字符串的第一个字符推断基数。前导 '0'
가 8진수를 의미하므로 7보다 큰 숫자는 유효하지 않기 때문에 발생합니다. 반대로 10을 전달하면 특별한 처리가 필요하지 않습니다.
위 내용은 이동 시간 변환 알고리즘이 올바르게 변환되지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!