标签:Golang func fmt strtotime str time 字符串 strings string
在php中,有strtotime 将字符串转换为时间戳,在Golang 中,同样可以实现类型的函数。
1 package main 2 3 import ( 4 "fmt" 5 "time" 6 "regexp" 7 "strings" 8 "strconv" 9 ) 10 11 func StartTimer(name string) func(){ 12 t := time.Now() 13 fmt.Println(name, "started") 14 15 return func(){ 16 d := time.Now().Sub(t) 17 fmt.Println(name, "took", d) 18 } 19 } 20 21 22 func RunTimer(){ 23 stop := StartTimer("run timer") 24 25 defer stop() 26 27 time.Sleep(1 * time.Second) 28 } 29 30 31 func strtotime(str string) int64 { 32 33 uintToSeconds := map[string]int64{"minute" : 60, "hour" : 3600, "day" : 86400, "week" : 604800, "year" : ((365 * 86400) + 86400)} 34 35 accumulator := time.Now().Unix() 36 37 var delta int64 38 plus := true 39 str = strings.TrimSpace(str) 40 41 if strings.HasPrefix(str, "in ") { 42 str = strings.Replace(str, "in ", "", 1) 43 } 44 45 if strings.Index(str, " ago") > 0 { 46 str = strings.Replace(str, " ago", "", 1) 47 plus = false 48 } 49 50 if strings.Index(str, "+") >= 0 { 51 str = strings.Replace(str, "+", "", 1) 52 } 53 54 if strings.Index(str, "-") >= 0 { 55 str = strings.Replace(str, "-", "", 1) 56 plus = false 57 } 58 59 noteValMap := make(map[string]int64, 10) 60 61 62 re := regexp.MustCompile(`\d+\s+(minute|hour|day|week|year)`) 63 64 parts := re.FindAllStringSubmatch(str, -1) 65 66 for i, _ := range parts { 67 strArray := strings.Split(parts[i][0], " ") 68 v, _:= strconv.Atoi(strArray[0]) 69 noteValMap[parts[i][1]] = int64(v) 70 } 71 72 delta = 0 73 for k, v := range noteValMap { 74 75 delta += uintToSeconds[k] * v 76 } 77 78 if plus { 79 accumulator += delta 80 } else { 81 accumulator -= delta 82 } 83 84 return accumulator 85 } 86 87 88 func main(){ 89 fmt.Println("in main") 90 timeStr := [...]string{"-1 week 3 days 30 minute", " 10 weeks 2 hours ago ", "+ 1 year 11 days 10 minutes"} 91 92 93 for _, v := range timeStr { 94 95 ts := strtotime(v) 96 97 timeObj := time.Unix(ts, 10) 98 99 fmt.Println(timeObj.Format("2006-01-02 15:04:05")) 100 } 101 102 RunTimer() 103 } 104 105 //output: 106 //2022-08-30 23:15:32 107 //2022-07-01 21:45:32 108 //2023-09-21 23:55:32
标签:Golang,func,fmt,strtotime,str,time,字符串,strings,string
来源: https://www.cnblogs.com/wallywl/p/16675782.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。