改进gtime.Format支持中文

This commit is contained in:
john
2018-11-07 17:55:45 +08:00
parent 5dc8e93936
commit f8329e1077
2 changed files with 22 additions and 73 deletions

View File

@ -104,39 +104,41 @@ func formatToRegexPattern(format string) string {
// 格式化,使用自定义日期格式
func (t *Time) Format(format string) string {
s := ""
for i := 0; i < len(format); {
switch format[i] {
runes := []rune(format)
buffer := bytes.NewBuffer(nil)
for i := 0; i < len(runes); {
switch runes[i] {
case '\\':
if i < len(format) - 1 {
s += string(format[i + 1])
if i < len(runes) - 1 {
buffer.WriteRune(runes[i + 1])
i += 2
continue
} else {
return s
return buffer.String()
}
default:
if f, ok := formats[format[i]]; ok {
r := t.Time.Format(f)
if runes[i] > 255 {
buffer.WriteRune(runes[i])
break
}
if f, ok := formats[byte(runes[i])]; ok {
result := t.Time.Format(f)
// 有几个转换的符号需要特殊处理
switch format[i] {
case 'j':
s += strings.Replace(r, "=j=0", "", -1)
case 'G':
s += strings.Replace(r, "=G=0", "", -1)
case 'u':
s += strings.Replace(r, "=u=.", "", -1)
switch runes[i] {
case 'j': buffer.WriteString(strings.Replace(result, "=j=0", "", -1))
case 'G': buffer.WriteString(strings.Replace(result, "=G=0", "", -1))
case 'u': buffer.WriteString(strings.Replace(result, "=u=.", "", -1))
default:
s += r
buffer.WriteString(result)
}
} else {
s += string(format[i])
buffer.WriteRune(runes[i])
}
}
i++
}
return s
return buffer.String()
}
// 格式化,使用标准库格式

View File

@ -2,62 +2,9 @@ package main
import (
"fmt"
"gitee.com/johng/gf/g/encoding/gjson"
"gitee.com/johng/gf/g/util/gconv"
"gitee.com/johng/gf/g/os/gtime"
)
func main() {
s := `title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
# Indentation (tabs and/or spaces) is allowed but not required
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
test = 1
# Line breaks are OK when inside arrays
hosts = [
"alpha",
"omega"
]`
j, err := gjson.LoadContent([]byte(s), "toml")
fmt.Println(err)
fmt.Println(gconv.Strings(j.GetStrings("servers")))
fmt.Println(gtime.Now().Format("Y年m月d日 H时i分s秒"))
}