使用Go的时间转义数字

时间:2018-07-12 18:20:02

标签: go formatting string-formatting

我目前正在尝试获取一个time.Time对象,并生成一个格式化的字符串,该字符串恰好包含一些我不想被解析为时间的数字。例如,考虑以下程序:

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    msg := now.Format("Encountered a 502 error on 2006-01-02 15:02 MST") 
    fmt.Println(msg)
}

不幸的是,此处的文本“ 502”被解释为时间:运行此代码将产生类似Encountered a 1112 error on 2018-07-12 9:12 UTC的输出。

有什么办法可以逃脱502个数字,因此它们不会被解释为数字?例如。类似于您如何在实现strftime样式格式逻辑的语言中使用%来逃脱%%元字符?

还是我唯一的选择就是将其拆分并使用两个格式化操作而不是一个?

nowString := now.Format("2006-01-02 15:02 MST")
msg := fmt.Sprintf("Encountered 502 error on %s", nowString)

1 个答案:

答案 0 :(得分:1)

否,time.Format中的数字不能转义。该方法的目的是格式化时间,而不是通常用于格式化字符串。

如果从多个位置使用它,通常的解决方案是制作一个简单的函数来进行格式化

func nowMessage(msg string) string {
    const layout = "2006-01-02 15:02 MST"
    return fmt.Sprintf("%s %s", msg, time.Now().Format(layout))
}