如何及时删除毫秒值中的点。格式

我想在 Go 中使用时间生成具有此特定格式的时间。格式化功能:

yyyy_MM_dd_HH_mm_ss_SSS    // SSS == milliseconds

按照文档,我到达了这一点(使用stdFracSecond0):

format := "2006_01_02_15_04_05_.000"
fmt.Println(time.Now().Format(format))

哪些输出:

2021_06_18_10_21_19_.179

如何删除毫秒值之前的点?

这不起作用(毫微始终为零):

format := "2006_01_02_15_04_05_000"

游乐场示例


慕村225694
浏览 75回答 3
3回答

慕无忌1623718

要在毫秒之前删除点,请使用方法 。请找到具有以下具有相同逻辑的代码。strings.Replace()package mainimport (    "fmt"    "strings"    "time")func main() {    format := "2006_01_02_15_04_05_.000"    fmt.Println(time.Now().Format(format))    fmt.Println(strings.Replace(time.Now().Format(format), "_.", "_", 1))}输出:2009_11_10_23_00_00_.0002009_11_10_23_00_00_000

慕沐林林

只需使用从格式化的时间字符串中删除即可。strings.Replace().strings.Replace(time.Now().Format(format), `.`, ``, 1)在这里运行

慕少森

do函数有效地从格式中删除(点)。.根据格式的约定,小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。因此,使用相同的方法是安全的(例如。 而不是 )。.000.999该函数执行一些健全性检查,以便格式无效。dopackage mainimport (    "errors"    "fmt"    "os"    "strings"    "time")// do replaces the dot (.) with underscore (_) safelyfunc do(t string) (string, error) {    // size is the expected length of the string    const size = 24    if tLen := len(t); tLen != size {        return "",            fmt.Errorf(                "invalid format size: expected %d, got %d", size, tLen,            )    }    if t[size-4] != '.' {        return "", errors.New("invalid format")    }    // Use strings.Builder for concatenation    sb := strings.Builder{}    sb.Grow(size)    // For: "2006_01_02_15_04_05_.000"    // Join "2006_01_02_15_04_05_" and "000"    sb.WriteString(t[0 : size-4])    sb.WriteString(t[size-3 : size])    return sb.String(), nil}func main() {    format := "2006_01_02_15_04_05_.000"    t, err := do(time.Now().Format(format))    if err != nil {        fmt.Fprintln(os.Stderr, err)        os.Exit(1)    }    fmt.Println(t)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go