我正在尝试以yyyy-mm-dd的形式解析用户输入的日期字符串(后面没有其他内容),以便可以以相同的方式将其写入文件(同样,后面没有其他内容)。 但是,用户输入未正确阅读,我也不知道为什么。任何提示都会很棒。
package main
import (
"bufio"
"fmt"
"os"
"time"
)
func main() {
var datestring string
reader := bufio.NewReader(os.Stdin)
fmt.Print("Startdatum im Format yyyy-mm-dd eingeben (z.B. 2018-06-24):\n")
datestring, _ = reader.ReadString('\n')
fmt.Printf("Type: %T, Value: %v", datestring, datestring)
t1, _ := time.Parse("2006-01-02", datestring) //0001-01-01 00:00:00 +0000 UTC
t2, _ := time.Parse("2006-01-02", "2018-05-27") //2018-05-27 00:00:00 +0000 UTC
fmt.Printf("%v\n%v\n", t1, t2)
}
答案 0 :(得分:1)
当您阅读datestring
时,它的末尾有换行符(\n
)。 time.Parse()
将其读取为解析错误,因为它不在您的格式字符串中,因此您需要进行处理。
一种方法是使用strings.TrimSpace()
将其剥离,如下所示:
datestring, _ = reader.ReadString('\n')
datestring = strings.TrimSpace(datestring)
您可以在字符串格式中交替添加\n
,但是我更倾向于修整换行符,因为它使用了更标准的时间格式字符串。
t1, _ := time.Parse("2006-01-02\n", datestring)
要对此进行调试,您应该像这样处理time.Parse()
中的错误:
t1, err := time.Parse("2006-01-02", datestring) //0001-01-01 00:00:00 +0000 UTC
if err != nil {
panic(err)
}
这将返回以下错误,指示您的字符串中还有其他文本。请注意,双引号"
不会紧随日期之后。
panic: parsing time "2018-06-24
": extra text:
goroutine 1 [running]:
main.main()
/path/to/main.go:19 +0x503
exit status 2
答案 1 :(得分:0)
我终于想出了这个解决方案:
package main
import (
"bufio"
"fmt"
"os"
"strings"
"time"
)
func main() {
// User date input
var datestring string
reader := bufio.NewReader(os.Stdin)
fmt.Print("Input start date in format yyyy-mm-dd (e.g. 2018-06-24):\n")
datestring, _ = reader.ReadString('\n')
datestring = strings.TrimSpace(datestring)
// Formatted date output
t1, err := time.Parse("2006-01-02", datestring) //0001-01-01 00:00:00 +0000 UTC
t2 := t1.Format("2006-01-02")
if err != nil {
panic(err)
}
fmt.Printf("Result: %v\n", t2)
}