>  기사  >  백엔드 개발  >  이동 시간 변환 알고리즘이 올바르게 변환되지 않습니다.

이동 시간 변환 알고리즘이 올바르게 변환되지 않습니다.

WBOY
WBOY앞으로
2024-02-14 10:00:09734검색

Go 小时转换算法未正确转换

오늘 소개할 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제