Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 戈朗日期解析故障_Date_Parsing_Go - Fatal编程技术网

Date 戈朗日期解析故障

Date 戈朗日期解析故障,date,parsing,go,Date,Parsing,Go,我试图解析一个用户输入的日期字符串,格式为yyyy mm dd(后面没有其他内容),这样我就可以以同样的方式将其写入文件(同样,后面没有其他内容)。 然而,用户输入没有正确读取,我不知道为什么。任何暗示都很好 package main import ( "bufio" "fmt" "os" "time" ) func main() { var datestring string reader := bufio.NewReader(os.Stdi

我试图解析一个用户输入的日期字符串,格式为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)

}

当您读取日期字符串时,它的结尾有一个换行符(
\n
)终止字符
time.Parse()
将此读取为解析错误,因为它不是您的格式字符串,所以您需要处理此错误

一种方法是使用
字符串将其剥离。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

我终于想出了这个解决方案:

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

一次.Parse返回一个time.time类型的对象,其String()接口{}是预定义的,用于以非常特定的方式打印时间值。如果希望它以接收时间的方式再次打印时间,则必须重新格式化自己。例如,
fmt.Println(t1.format(“2006-01-02”))
Never,字面上说,Never,Never,Never,Never,Never,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,Every,EveryReadString一直读取,直到输入中第一次出现delim,返回一个包含数据的字符串,直到并包括分隔符。