せずに任意のアイデアを、日付を解析します。もちろんセパレータ
date, err := time.Parse("1206", "31916")
fmt.Println(date, err)
私はそれをやっているように3とない31として月扱いたいが、私は形式にセパレータを追加する外ヶ月間3で停止し、それを強制するかどうかはわかりません。例えば
せずに任意のアイデアを、日付を解析します。もちろんセパレータ
date, err := time.Parse("1206", "31916")
fmt.Println(date, err)
私はそれをやっているように3とない31として月扱いたいが、私は形式にセパレータを追加する外ヶ月間3で停止し、それを強制するかどうかはわかりません。例えば
、
package main
import (
"fmt"
"time"
)
func parseDate(date string) (time.Time, error) {
if len(date) == 5 {
date = "0" + date
}
return time.Parse("010206", date)
}
func main() {
date, err := parseDate("31916")
fmt.Println(date, err)
date, err = parseDate("031916")
fmt.Println(date, err)
date, err = parseDate("121916")
fmt.Println(date, err)
}
出力:
2016-03-19 00:00:00 +0000 UTC <nil>
2016-03-19 00:00:00 +0000 UTC <nil>
2016-12-19 00:00:00 +0000 UTC <nil>
あなたがすることはできません。あなたが渡すレイアウトは確定的ではありません。月が終わり、文字列で始まる日を知る方法はありません。一方のオプションが失敗し、もう一方が失敗した場合("11106"
- と思います)は1\11\06
または11\1\06
? )。あなたの最善の策は、選択が確定的になりラッパーを書くことである:ここ
import (
"time"
"strconv"
)
func parseWeirdLayout(dateString string) (time.Time, error) {
parsedString := ""
if len(dateString) == 5 {
month, err := strconv.Atoi(dateString[0:2])
if err != nil {
return time.Now(), err
}
if month < 1 || month > 12 {
parsedString = "0" + dateString
} else {
parsedString = dateString[:2] + "0" + dateString[2:]
}
} else if len(dateString) == 4 {
parsedString = "0" + dateString[:1] + "0" + dateString[1:]
}
return time.Parse("010206", parsedString)
}
テスト:https://play.golang.org/p/u1QFPzehMj
あるいは単に異なる、決定論的なレイアウトを使用して、例えば"010206"
。
申し訳ありません私はあなたのフォーマットを取得していません..どの日が '31916'ですか?あなたは2016年3月19日のようにしていますか? – Vasif
奇妙な考え方として、書式を '1 2 06'に変更し、' 31916'のすべての順列をスペースで生成することができます。それはちょうど16の組合せである。次に、それぞれを確認します。 – zerkms