Golang中日期和时间格式不正确的问题

Golang中日期和时间格式不正确的问题 不确定我遗漏了什么。 操作很简单:将当前时间格式化为特定格式。 希望使用的格式是:

yyyy.MM.dd’T’HH:mm:ss.SSS

fmt.Println(time.Now().Format("2018.07.08T12:00:00.123"))

输出结果为
10118.07.08T1110:00:00.111011

Go Playground - The Go Programming Language


更多关于Golang中日期和时间格式不正确的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

谢谢 @skillian。我不明白的是,除了末尾的毫秒部分,你的格式和我的格式有什么不同?

不过我发现 Go Playground 在处理时间方面存在问题。

更多关于Golang中日期和时间格式不正确的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我不确定该怎么做,或者这是否能做到。

哦!这真是学到不少。

另一个问题是,如何在格式化器中限制毫秒数仅为2-3位数字?有什么办法吗?

传入 Format 的字符串必须是一个特定的值:2006-01-02 03:04:05 PM (UTC-7)。请注意其中包含了1到7的所有数字。在Go中定义格式的方法是,以你希望实际时间值被格式化成的格式,写出那个特定的日期。在你的情况下,我认为你希望它是:"2006.01.02T15:04:05"

func main() {
    fmt.Println("hello world")
}

区别在于你使用了日期 2018-07-08,但它必须特定的日期 2006-01-02。这些是 Go 用来分别确定它应该格式化年、月和日位置的魔数。

func main() {
    fmt.Println("hello world")
}

在Go语言中,日期时间格式化必须使用特定的参考时间:Mon Jan 2 15:04:05 MST 2006(记忆口诀:2006-1-2 15:04:05)。

对于你想要的格式 yyyy.MM.dd’T’HH:mm:ss.SSS,正确的格式化字符串应该是:

package main

import (
	"fmt"
	"time"
)

func main() {
	// 正确的格式化方式
	fmt.Println(time.Now().Format("2006.01.02T15:04:05.000"))
	
	// 或者使用常量定义
	const layout = "2006.01.02T15:04:05.000"
	fmt.Println(time.Now().Format(layout))
	
	// 示例输出:2023.12.25T14:30:45.123
}

关键点:

  • 2006 对应年份(yyyy)
  • 01 对应月份(MM)
  • 02 对应日期(dd)
  • 15 对应24小时制小时(HH)
  • 04 对应分钟(mm)
  • 05 对应秒(ss)
  • 000 对应毫秒(SSS),使用三个0表示三位毫秒

你之前使用 "2018.07.08T12:00:00.123" 作为格式化字符串,Go会将其中的数字解释为时间组件的位置,导致输出混乱。

回到顶部