当前位置: > > > > Go 小时转换算法未正确转换
来源:stackoverflow
2024-04-28 10:03:28
0浏览
收藏
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《Go 小时转换算法未正确转换》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!
问题内容
我遇到了一个 hackerrank 挑战,我应该构建一个函数,将给定时间格式的字符串从 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")) }
正确答案
如果您在字符串到 int 转换过程中发现错误,您会注意到对于值 >7
,转换失败
firstValueNumber, err := strconv.ParseInt(firstValue, 0, 64) if err != nil { fmt.Printf("%s", err.Error()) } // "08" results in invalid syntaxfirstValueNumber being printed
发生这种情况是因为您传递 0 作为基数,告诉 parseint
从字符串的第一个字符推断基数。前导 '0'
意味着八进制基数,因此大于 7 的数字将无效。相反,传递 10 就不需要特殊处理。
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注公众号,一起学习编程~