1
rwx 2013-11-26 19:29:38 +08:00 1
刚测试了一下,time包里nano的格式好像只能是带「.」的「.000000000」或者「.999999999」才能识别,格式化出来的字符串,也带「.」……
time.Now().Format("15:04:05,.999999999") //19:21:04,.583492285 所以一个一个的读然后再组合可能还是最清晰的方式了 然后就是Parse用的格式和Format一样,并且如果你的格式里没给人家带出年份的话,它会甩给你一个巨大的负数时间戳,估计年份直接是0000年了 t, err := time.ParseInLocation("2006-01-02 15:04:05.999999999", "2013-11-26 19:08:17.583492285", time.Local) fmt.Println(t.Unix(), t.Nanosecond(), err) |
2
meta OP 年份到无所谓,我测试过,可以忽略掉,计算还是准确的,不显示就行了。倒是这个格式太坑爹了,看来只能自己写代码匹配了。
|
3
gihnius 2013-11-26 20:13:14 +08:00 1
通过 Sprintf 转换一下吧
|
4
rlx 2013-11-28 10:08:45 +08:00
试试这个行不行
import "time" import "fmt" import "strings" const DefaultTimeFormat1 = "2006-01-02T15:04:05,999999999" const DefaultTimeFormat2 = "2006-01-02T15:04:05.999999999" func main() { fmt.Printf("Time: %s\n, time.Now().Format(DefaultTimeFormat1)) // Transfer 2013-11-26 19:08:17,583492285 to time timeStr = "2013-11-26 19:08:17,583492285" timeStr = strings.Replace(timeStr, ",", ".", 1) t, err := time.Prase(timeStr, DefaultTimeFormat2) if err != nil { fmt.Println(err) return } fmt.Printf("TimeTransfer: %s\n, t.Format(DefaultTimeFormat1)) } |
5
rlx 2013-11-28 10:10:22 +08:00
e, fmt.Printf里面漏掉了一个 "。
|
6
rlx 2013-11-28 10:24:09 +08:00 1
修改了一下。
package main import ( "time" "fmt" "strings" ) const ( DefaultTimeFormat = "2006-01-02 15:04:05.999999999" ) func main() { timeStr := time.Now().Format(DefaultTimeFormat) timeStr = strings.Replace(timeStr, ".", ",", 1) fmt.Printf("TimeNow: %s\n", timeStr) timeStr = "2013-11-26 19:08:17,583492285" fmt.Println("TimeTransferBefore:", timeStr) timeStr = strings.Replace(timeStr, ",", ".", 1) t, err := time.Parse(DefaultTimeFormat, timeStr) if err != nil { fmt.Println(err) return } timeStr = t.Format(DefaultTimeFormat) timeStr = strings.Replace(timeStr, ".", ",", 1) fmt.Println("TimeTransferAfter:", timeStr) } |
7
meta OP @rlx 我也考虑过直接替换的办法,但这只是个临时办法,只能解决这一种情况,还是不定自由的设置格式。
其实要解决并不困难,用自己的Parse就行了。我只是觉得golang的这种设计很奇怪,为什么一个时间模板的前面几段都是整数和字符串,最后一段必须要是一个小数。 |
8
rlx 2013-11-29 12:43:48 +08:00
嗯,那可以fork 一下 $GOROOT/src/pkg/time/format.go
|
9
meta OP 看过了,写死的:
if len(value) >= 2 && value[0] == '.' && isDigit(value, 1) |