代码之家  ›  专栏  ›  技术社区  ›  Michael0x2a

使用go's time时转义数字。格式

  •  2
  • Michael0x2a  · 技术社区  · 6 年前

    我正在尝试 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 回复  |  直到 6 年前
        1
  •  1
  •   JimB    6 年前

    不,这里没有数字转义符 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))
    }