日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

php小編新一今天要給大家介紹的是Go語言中的一個問題,即“Go 小時轉換算法未正確轉換”。在Go語言中,時間轉換是一個常見的操作,但是在某些情況下,小時轉換的結果可能會出現錯誤。本文將詳細解釋這個問題的原因,并提供解決方案,幫助開發者避免在使用Go語言進行時間轉換時出現錯誤。

問題內容

我遇到了一個 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 就不需要特殊處理。

分享到:
標簽:Go語言
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定