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

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

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

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

問題內(nèi)容

我遇到了一個(gè) hackerrank 挑戰(zhàn),我應(yīng)該構(gòu)建一個(gè)函數(shù),將給定時(shí)間格式的字符串從 12 小時(shí)格式轉(zhuǎn)換為 24 小時(shí)格式。

我設(shè)法使用下面的代碼做到了這一點(diǎn),但正如您所注意到的,晚上 9 點(diǎn)有一個(gè)特殊情況。每當(dāng)我輸入以 09 開頭的一個(gè)小時(shí)(只有這個(gè)該死的)時(shí),它會將 09 轉(zhuǎn)換為 12。所以我必須創(chuàng)建一個(gè)特定的案例來處理這個(gè)問題,這很有效,但我想了解為什么它發(fā)生了。你知道問題出在哪里嗎?

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"))
}

登錄后復(fù)制

解決方法

如果您在字符串到 int 轉(zhuǎn)換過程中發(fā)現(xiàn)錯(cuò)誤,您會注意到對于值 >7,轉(zhuǎn)換失敗

firstValueNumber, err := strconv.ParseInt(firstValue, 0, 64)
if err != nil {
     fmt.Printf("%s", err.Error())
}
// "08" results in invalid syntaxfirstValueNumber being printed

登錄后復(fù)制

發(fā)生這種情況是因?yàn)槟鷤鬟f 0 作為基數(shù),告訴 parseint 從字符串的第一個(gè)字符推斷基數(shù)。前導(dǎo) '0' 意味著八進(jìn)制基數(shù),因此大于 7 的數(shù)字將無效。相反,傳遞 10 就不需要特殊處理。

分享到:
標(biāo)簽:Go語言
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定